CodeGym/Java Course/Module 3 a ɛto so abien/選擇Java中的垃圾收集器

選擇Java中的垃圾收集器

開放

7.1* 如何選擇合適的垃圾收集器

如果您的應用程序沒有嚴格的延遲要求,您應該只運行應用程序並讓 JVM 自己選擇正確的收集器。

在大多數情況下,默認設置工作正常。如有必要,您可以調整堆大小以提高性能。如果性能仍然不如預期,請嘗試修改收集器以滿足您的應用程序要求。

  • 順序的。如果應用程序有一個小數據集(最多約 100 MB)和/或它將在沒有任何延遲要求的單個處理器上運行。
  • 並行。如果優先級是應用程序的峰值性能並且沒有延遲要求(或者一秒或更長時間的暫停是可以接受的)。
  • 內容管理系統/G1。如果響應時間比整體吞吐量更重要,那麼垃圾收集暫停應該短於一秒。
  • 中關村_ 如果響應時間是高優先級和/或涉及非常大的堆。

7.2* 垃圾回收建議

避免手動觸發

除了垃圾回收的基本機制外,Java 中這個過程最重要的一點是它是非確定性的。也就是說,無法準確預測它在運行時何時會發生。

使用 System.gc() 或 Runtime.gc() 方法,您可以在代碼中包含啟動垃圾收集器的提示,但這並不能保證它會實際運行。

使用分析工具

如果您沒有足夠的內存來運行您的應用程序,您將遇到速度減慢、垃圾收集時間長、“世界停止”事件,並最終出現內存不足錯誤。這可能表明堆太小,但也可能表明應用程序存在內存洩漏。

您可以使用 jstat 或 Java Flight Recorder 等監控工具來查看堆使用量是否無限增長,這可能表明代碼中存在錯誤。

更喜歡默認設置

如果您有一個小型的獨立 Java 應用程序,您可能不需要設置垃圾收集。默認設置將為您提供良好的服務。

使用 JVM 標誌進行自定義

在 Java 中設置垃圾回收的最佳方法是設置 JVM 標誌。標誌可用於設置垃圾收集器(例如,Serial、G1 等)、堆的初始和最大大小、堆分區的大小(例如,新生代、老年代)等等更多的。

選擇合適的水龍頭

就初始設置而言,一個很好的指導方針是自定義應用程序的性質。例如,並發垃圾收集器是高效的,但經常引發“world stop”事件,使其更適合可以接受長時間暫停的內部處理。

同時,CMS 垃圾收集器旨在最大限度地減少延遲,這使其非常適合響應性很重要的 Web 應用程序。

留言
  • 受歡迎
你必須登入才能留言
此頁面尚無留言