jvm JDK8中Shenandoah GC的性能比G1差吗?

ve7v8dk2  于 10个月前  发布在  其他
关注(0)|答案(1)|浏览(121)

我使用red hat提供的image来构建jdk8编写的应用程序。
这里是Dockerfile

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

个字符
然后我使用Jmeter工具进行压力测试,我设置了200个工作线程,持续时间为10分钟。
下面是应用程序代码:

public class GCController {

    // Simulating constants, caches, and other objects in application services.
    private static  final int[] CONSTANT  = new int[1024 * 1024 * 125];

    @GetMapping("/allocate")
    public void allocate(){
        try {
            // Assmuing each request cost 1M.
            int[] allocate = new int[1024 * 256];
            allocate[0] = 1;
            allocate[2] = 2;
        }catch (Exception e){
            // ignore
        }
    }
}


用于测试的机器配置为2个CPU、2GB内存和4M带宽。
enter image description here如果我做测试,cpu的使用率将接近100%
实验结果表明,G1算法的性能优于Shenandoah算法。我的实验有什么问题吗?Shenandoah GC log
G1 GC log

dluptydi

dluptydi1#

像ShenandoahGC和ZGC这样的低暂停收集器并不是为了超越G1GC或ParallelGC而设计的。它们被设计为具有低(或几乎为零)的JVM暂停,因此它们更适合真实的工作负载。“真实的”并不意味着快,它只是意味着整体性能更可预测。

相关问题