Java自动堆增加"透明"还是有成本?

Bla*_*acK 5 java garbage-collection heap-memory

我要更好地解释一下:

是否最好将-Xms <>参数设置为JVM预期的内存,或者最好将其保留为自动状态?我的意思是,如果我知道我的应用程序将使用至少500MB的RAM和最大1 GB(使用随机数),那么将参数设置为JVM会更好吗?我知道如果你有一个更大的堆,结果是你有更长的等待时间,但如果堆几乎完成,JVM是否应该重新占用占用的内存(浪费宝贵的时间)?

图http://upperpix.com/di-F0LD.png

Ste*_*n C 2

堆扩展的过程确实会影响性能。但是,效果取决于您所谈论的性能类型。

一项性能标准是“进行垃圾收集”所花费的处理器时间的百分比;即“吞吐量”。针对吞吐量进行优化的 GC 往往在大堆上工作得最好。因此,在这种情况下,简单的分析表明,您将更好地将堆预分配到您期望需要的大小......而不是从小处开始并依赖 GC 来扩展堆。

另一个性能标准是暂停时间。然而,“低停顿”收集器的行为对于上述简单化的分析风格来说过于复杂。(而且我不知道它在实践中通常是如何运作的......)


有一个方面是全面适用的。假设应用程序的堆使用达到(大致)稳定状态,并且假设它在 JVM 生命周期的早期就达到该状态,则达到该稳定状态所涉及的各种性能开销(即应用程序的“预热”开销) )将趋于微不足道。