测试垃圾收集器的收集速度:
G1收集器:
-Xms256m
-Xmx256m
-XX:+UseG1GC
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-verbose:gc
-Xloggc:gc.log
Parallel Scavenge & Parallel Old
-Xms256m
-Xmx256m
-XX:+UseG1GC
-XX:+PrintGCTimeStamps
-XX:+PrintGCDetails
-verbose:gc
-Xloggc:gc.log
同一环境运行,比较内存溢出所需时间:
G1多次试验 稳定在7000ms左右以下是日志截图
Parallel Scavenge & Parallel Old 创建和收集速度会差1K 然后一直增长到堆满
结论:
堆空间较小的时候,不适用于G1
1. G1适用场景
G1适合作为服务端垃圾收集器,应用在多处理器和大内存的条件下,可以实现高吞吐量的同时,尽可能满足垃圾收集较短可控的暂停时间,主要针对以下场景设计
像CMS一样,能与应用程序并发执行
更快速整理空闲空间
GC停顿时间更可控
不会牺牲大量吞吐性能
服务端多核CPU、JVM内存占用较大的应用(至少大于4G)
应用在运行过程中会产生大量内存碎片、需要经常压缩空间
想要更可控、可预期的GC停顿周期;防止高并发下应用雪崩现象
2.Parallel Scavenge & Parallel Old使用场景
适用于一些需要长期运行且对吞吐量有一定要求的后台程序。