Java GC调优思路

2018-12-13  本文已影响0人  kid551

根据在memory中存活时间的长短,Java所掌控的内存被分为了young generation和old generation。如同字面意思,young generation意味着生存时间的短暂,基本上很快就被GC掉。而old generation则是可以存活很久的object,会长期在memory中存在。

考虑GC的优化,主要是两方面:

影响GC的因素:

Heap的大小由“整个分配给应用程序的内存大小”(-Xms<min>-Xmx<max>)和heap所占比例(-XX:MinHeapFreeRation=<minimum>-XX:MaxHeapFreeRatio=<maximum>)来决定。

Option Default Value
-XX:MiniHeapFreeRatio 40
-XX:MiniHeapFreeRatio 70
-Xms 6656K
-Xmx calculated

如果需要减少memory footprint,只需要限制heap size,比如将-XX:MiniHeapFreeRatio降到10。

接下来是young generation的大小,也就是它占heap memory的比例。更多的young generation意味着更少的小范围GC,但由于减少了old generation,这意味着更频繁的大范围GC。它是由参数-XX:NewRatio控制的。例如-XX:NewRatio=3表示young generation和old generation的比例为1:3,也即是Eden和Survivor Space加起来只占heap memory的四分之一。当然,你还可以使用-XX:NewSize-XX:MaxNewSize来直接控制young generation的范围。

-XX:SurvivorRatio可以用来调节Eden和Survivor的比例(虽然对performance的影响不大)。例如-XX:SurvivorRatio=6意味着Survivor和Eden的比例为1:6,同时意味着Survivor占整个young generation的八分之一(不是七分之一,因为Survivor有两块)。

上一篇下一篇

猜你喜欢

热点阅读