日志标签:gc

[读书笔记]《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太频繁,正确的做法是加大新生代的大小。 在改变新生代大小时,注意保持老年代不变。 根据计算,得到大概的对象分配速率。在增大新生代以减低频度的时候,计算出大概…

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

分类:java评论:2条作者:ticmy日期:2013-05-17

Throughput GC指定方式: -XX:+UseParallelOldGC 或 -XX:+UseParallelGC,两者的区别是,-XX:+UseParallelOldGC同时激活新生代并行垃圾回收和老年代的并行垃圾回收,亦即,Minor GC和Full GC都是多线程的;-XX:+UseParallelGC只会激活新生代的并行垃圾回收。也就是使用了-XX:+UseParallelOldGC会自动激活-XX:+UseParallelGC。 在生产系统中,推荐打印出垃圾收集日志,开销很小,但能提供很多信息。推荐的命令行选项的最小集:-XX:+PrintGCTimestamps -XX:+PrintGCDetails -Xloggc:<fileName> -XX:+PrintGCDateStamps打印出的是日期,要求Java 6 Update 4及以上版本;-XX:+PrintGCTimeStamps打印出的是相对于JVM启动的时间偏移量。 老年代使用CMS(-XX:+UseConcMarkSweepGC),配合其使用的新生代垃圾收集器为多线程的ParNew;老年代使用Serial GC,配合其使用的新生代为单线程的DefNew。 为低等待时间(STW停顿)调优时,可以使用这两个选项: -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime 重视吞吐…
Tags: ,