关于在不同GC下的性能评估
事先声明,这个测试只是简单测试不同GC下的远行星号加载速度,即只考虑了打开游戏的加载时间修改的文件为:vmparams
基本概念:
Serial GC:
-XX:+UseSerialGC
这是最简单的垃圾收集器,适用于单处理器机器,或者小型应用。
Parallel GC(也称为Throughput Collector):
-XX:+UseParallelGC
适用于多处理器机器,旨在提高吞吐量。
Concurrent Mark Sweep (CMS) GC:
-XX:+UseConcMarkSweepGC
这种收集器试图最小化停顿时间,适用于需要低延迟的应用。
G1 GC(默认GC方法):
-XX:+UseG1GC
适用于大堆内存,旨在提供可预测的停顿时间。
测试环境为:
java8
mod:
看图片,太多了
针对以上的GC方法测试:(别问为什么没有Shenandoah GC,问就是不支持高java)
+UseConcMarkSweepGC:1分04秒
+UseG1GC:1分27秒
+UseSerialGC:1分14秒
+UseParallelGC:1分钟
由此可得,使用UseParallelGC方法在加载页面加载最快
全测试终
这个测试对于调优实际游戏体验没有太大帮助。为游戏加载时间优化就相当于为吞吐优化,这个可以不考虑GC的停顿时长,所以用为吞吐优化的GC自然会快。然而实际游戏过程中GC的停顿更加影响体验,所以才需要用G1这样的为停顿时间优化的GC。
GC的高吞吐和低停顿时间不可兼得。吞吐高了停顿时间就长,停顿时间短吞吐就稀烂。现代的无暂停GC(包括ZGC,Shenadoah GC)的低停顿时长都是牺牲吞吐换来的。
页:
[1]