美文网首页
Java GC调优思路

Java GC调优思路

作者: kid551 | 来源:发表于2018-12-13 00:47 被阅读0次

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

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

    • 吞吐量(throughput):固定时间段内,不用再GC上的时间比例,也即是衡量GC耗费时间的快慢。
    • 延迟(latency):

    影响GC的因素:

    • heap的大小
    • young generation的比例

    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有两块)。

    相关文章

      网友评论

          本文标题:Java GC调优思路

          本文链接:https://www.haomeiwen.com/subject/zdwmhqtx.html