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

禁用Java垃圾回收为何反而导致性能下降?

Java堆分配性能探究:EpsilonGC禁用GC后性能反而下降的原因

我正在研究Java堆分配对应用整体性能的影响,为此编写了一个创建大量对象的简单程序:

public static void main(final String... args) {
    int sum = 0;
    for (int i = 0; i < 4_000_000; ++i) {
        final Product product = new Product(i);
        sum += product.price();
    }
    System.out.printf("Total: %d\n", sum);
}

private static class Product {
    final String name = new String("Banana");
    final int price;
    private Product(final int price) {
        this.price = price;
    }
    public int price() {
        return this.price % 100;
    }
}

通过JMH测试,程序默认执行时间约为12.265ms。为探究禁用垃圾回收的影响,我使用EpsilonGC并添加以下JVM参数:

-Xmx12294M -Xms12294M -XX:+UnlockExperimentalVMOptions -XX:+UseEpsilonGC

测试后执行时间意外升至69.188ms,与预期相悖。我困惑于禁用垃圾回收为何会大幅降低性能,是内存中对象数量增加导致分配时间变长,还是存在其他原因?

补充信息

1. JMH微基准测试代码

public class ProductsTest {
    public static void main(String[] args) throws RunnerException {
        new Runner(
            new OptionsBuilder()
                .forks(1)
                .warmupIterations(1)
                .measurementIterations(1)
                .warmupTime(TimeValue.seconds(3))
                .measurementTime(TimeValue.seconds(3))
                .mode(Mode.AverageTime)
                .timeUnit(TimeUnit.MILLISECONDS)
                .build()
        ).run();
    }

    @Benchmark
    public void products() {
        Products.main();
    }
}

2. 系统属性

  • Apache Maven 3.9.0
  • Java: azul-11(Java版本11.0.12)
  • OS名称:"mac os x",版本:"12.5",架构:"x86_64",系列:"Mac"
  • 可用内存:16G

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 08:02:17