You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JDK8中Shenandoah GC性能是否弱于G1?实验存疑求助

实验疑问:G1 GC性能优于Shenandoah GC是否存在实验偏差?

实验配置

镜像与Dockerfile

  • Shenandoah GC配置(基于Red Hat UBI8 OpenJDK8运行时镜像):
From registry.access.redhat.com/ubi8/openjdk-8-runtime:latest
COPY benchmark-1.0.0.jar /benchmark.jar
EXPOSE 8080
ENV JAVA_OPTS="\
-server \
-XX:+UseShenandoahGC \
-Xms1g \
-Xmx1g \
-XX:MetaspaceSize=256m \
-XX:MaxMetaspaceSize=256m \
-verbose:gc \
-XX:+PrintGCDetails \
-XX:ConcGCThreads=2 \
-Xloggc:/home/jboss/gc.log \
-XX:+PrintGCDateStamps \
-XX:+AlwaysPreTouch"

ENTRYPOINT java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar /benchmark.jar
  • G1 GC配置(基于Alpine OpenJDK8镜像):
From java:openjdk-8u111-jre-alpine
COPY benchmark-1.0.0.jar /benchmark.jar 
EXPOSE 8080
ENV JAVA_OPTS="\
-server \
-XX:+UseG1GC \
-Xms1g \
-Xmx1g \
-verbose:gc \
-XX:+PrintGCDetails \
-Xloggc:/gc.log \
-XX:+PrintGCDateStamps \
-XX:+AlwaysPreTouch"

压测参数与应用代码

  • 压测工具:JMeter,200个工作线程,持续压测10分钟
  • 测试应用代码:
public class GCController {

    // 模拟应用服务中的常量、缓存及其他对象
    private static final int[] CONSTANT = new int[1024 * 1024 * 125];

    @GetMapping("/allocate")
    public void allocate(){
        try {
            // 模拟每个请求分配1M内存
            int[] allocate = new int[1024 * 256];
            allocate[0] = 1;
            allocate[2] = 2;
        }catch (Exception e){
            // 忽略异常
        }
    }
}

测试环境

测试机器配置:2核CPU、2GB内存、4M带宽,压测期间CPU使用率接近100%

实验结果与疑问

实验结果显示G1 GC的性能优于Shenandoah GC,请问该实验是否存在设计或配置上的问题?

补充参考资料:

  • CPU使用率截图
  • Shenandoah GC日志
  • G1 GC日志

内容的提问来源于stack exchange,提问作者Mangosteen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 12:20:55