测试串行吞吐量
堆内存:-Xmx32M 栈内存:-Xms32M
-XX:+PrintGCDetails -Xmx32M -Xms32M
-XX:+HeapDumpOnOutOfMemoryError
-XX:+UseSerialGC
-XX:PermSize=32M

调整初始堆
-XX:+PrintGCDetails -Xmx512M –Xms512M
-XX:+HeapDumpOnOutOfMemoryError
-XX:+UseSerialGC
-XX:PermSize=32M
结果:

并行回收(UseParNewGC)
-XX:+PrintGCDetails -Xmx512M –Xms512M
-XX:+HeapDumpOnOutOfMemoryError
-XX:+UseParNewGC
-XX:PermSize=32M
结果:GC回收0次 吞吐量452

并行合并回收(UseParallelGC)
-XX:+PrintGCDetails -Xmx512M -Xms256M
-XX:+HeapDumpOnOutOfMemoryError
-XX:+UseParallelGC
-XX:+UseParallelOldGC
-XX:ParallelGCThreads=8
-XX:PermSize=32M
结果:GC回收0次 吞吐量452
调优总结
初始堆值和最大堆内存内存越大,吞吐量就越高。
最好使用并行收集器,因为并行手机器速度比串行吞吐量高,速度快。
设置堆内存新生代的比例和老年代的比例最好为1:2或者1:3。
减少GC对老年代的回收。
本文通过测试不同垃圾回收策略下的串行与并行回收效果,总结了Java GC调优的关键点,包括初始堆与最大堆内存设置、使用并行收集器提高吞吐量及调整新生代与老年代比例。
933

被折叠的 条评论
为什么被折叠?



