按月存档: 2013/06

[读书笔记]《Java Performance》GC(2)

分类:java评论:6条作者:ticmy日期:2013-06-22

计算LiveData Size Live Data Size是应用运行稳定,经历过Full GC之后老年代和永久代的堆内存占用。最好是观察多次取均值。 强制Full GC:jmap –histo:live <pid> <pid>可以通过jps命令获得。 初始堆大小 一般,-Xms和-Xmx的初始值应当设为老年代Live Data Size的3到4倍;-XX:PermSize和-XX:MaxPermSize的初始值应当设为永久代Live Data Size的1.2到1.5倍;新生代的初始大小应当设为老年代Live Data Size的1到1.5倍。 为低延迟/响应性调优 如果吞吐量GC的持续时间或频度比应用要求高很多的话,考虑换CMS。 细化新生代大小 尽管Minor GC的时间与新生代中可触及的对象数有关,但一般来说,新生代越小,Minor GC耗时越短,但,减少新生代的大小,会增加Minor GC的频度。因为在相同的对象分配速率下,新生代越小,满的越快;相反,增加新生代的大小会降低Minor GC的频度。 若发现Minor GC耗时太长,正确的做法是减小新生代的大小;若Minor GC太频繁,正确的做法是加大新生代的大小。 在改变新生代大小时,注意保持老年代不变。 根据计算,得到大概的对象分配速率。在增大新生代以减低频度的时候,计算出大概…