2014-08-31 86 views
3

我們知道,在Java中,完整的GC可以掛起JVM,該JVM也可以稱爲STOP-THE-WORLD。在很多應用程序中,將JVM掛起太久會導致很多問題。我想知道如何減少GC中STOP-THE-WORLD的時間?減少STOP-THE-WORLD時間造成的潛在缺陷是什麼? (不考慮沒有停止的世界行爲的JVM)如何減少Java中STOP-THE-WORLD的時間GC

+0

你試過其他垃圾收集器嗎? http://www.oracle.com/technetwork/java/faq-140837.html – 2014-08-31 16:22:06

回答

2

有許多方法

  • 產生更少的垃圾。內存分析器將有所幫助。
  • 使用較少的堆。分析器可以幫助減少使用的內存。
  • 改爲使用堆內存。有許多庫可以將堆中的數據存儲起來。例如編年史。
  • 使用更多的記憶和GC會發生較少,可能不太嚴重時,他們這樣做。如果你使用的堆少於32 GB,這可能是一個快速的勝利。
  • 使用完全併發的收集器,如Azul的Zing。它沒有STW收集器。

我會從內存分析器開始,以減少垃圾和堆的使用,並調整GC。

0

如果您的對象活得很長時間,您可以嘗試使用來自新I/O包的DirectBuffers。它們的創建和回收比創建和回收基於堆的非直接緩衝區更昂貴,因爲直接緩衝區是使用操作系統特定的本機代碼進行管理的。這種增加的管理成本使直接緩衝區成爲單次使用或不常使用的案例的不佳選擇。

直接緩衝區也在Java垃圾回收器的範圍之外。

+0

感謝您的遲到答案!什麼是與STOP-THE-WORLD有關的新的DirectBuffers。問題? – snow8261 2015-04-22 01:32:26