go比java快多少

尽管大多数开发人员仍然使用Java 8 ,但Java 11还是在不久前发布的。 让我们看看其中哪个对OptaPlanner更快。 找出答案的最佳方法当然是运行OptaPlanner基准测试。 本文是我们针对Java 8的类似文章的后续文章 。

基准方法

为了运行基准测试,我们使用了:

  • 运行RHEL 6,运行2 x Intel® Xeon® CPU E5-2609 0 @ 2.4 GHz (8 cores total)31.3 GiB RAM内存的稳定机器,无需运行任何其他计算要求高的进程。
  • 两种Java版本的G1和Parallel GC都比较了垃圾回收的影响。 Java分别使用-Xmx1536M -server -XX:+UseG1GC-Xmx1536M -server -XX:+UseParallelGC
  • 两种Oracle Java 8:
java version "1.8.0_191"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)

和OpenJDK 11:

openjdk version "11.0.1" 2018-10-16
OpenJDK Runtime Environment 18.9 (build 11.0.1+13)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.1+13, mixed mode)
  • OptaPlanner 7.14.0.Final
  • 解决计划问题不涉及任何IO (启动期间要加载输入的几毫秒除外)。 一个CPU完全饱和。 它会不断创建许多短命的对象,然后GC会收集它们。
  • 每次运行都可以使用OptaPlanner解决11个计划问题。 每个计划问题将运行5分钟,并以30秒的JVM预热开始,该预热将被丢弃。
  • 基准衡量每毫秒计算的分数数。 越高越好。 为提议的规划解决方案计算分数并非易事:涉及许多计算,包括检查每个实体与每个其他实体之间的冲突。

执行摘要

使用Java 11,G1的平均改进为16.1 ,并行GC的平均改进为4.5% 。 尽管并行GC面向吞吐量,而G1则侧重于低延迟垃圾回收,但是Java 11中G1的重大改进导致直接比较了这两种垃圾回收算法 。 有关各种GC算法之间差异的更多信息,请参见本文

这表明并行GC仍然是OptaPlanner的首选GC,因为吞吐量对于解决OptaPlanner的优化问题比由GC引入的延迟更为重要。

结果

Java 8和Java 11



go与java效率 go和java谁快_java



云平衡

机器重新分配

课程安排

考试安排

护士名册

巡回赛

JDK

200度

800c

B1

B10

c7

c8

s2

s3

m1

1小时

14天

Java 8

38,074

34,870

113,490

20,398

4,296

4,840

7,003

5,437

2,385

2,021

812

OpenJDK 11

41,753

41,282

166,676

20,363

4,473

5,466

8,157

5,927

2,772

2,536

957年

区别

9.7%

18.4%

46.9%

-0.2%

4.1%

12.9%

16.5%

9.0%

16.2%

25.5%

17.9%

平均

16.1%

使用G1垃圾收集器,几乎所有数据集在Java 11上都优于Java 8。 平均而言,仅切换到Java 11即可实现16%的改进。对此改进的可能解释可能是Java 10中引入的JEP 307:用于G1的并行完整GC 。



go与java效率 go和java谁快_go与java效率_02



云平衡

机器重新分配

课程安排

考试安排

护士名册

巡回赛

JDK

200度

800c

B1

B10

c7

c8

s2

s3

m1

1小时

14天

Java 8

54,990

52,514

122,611

13,382

4,821

5,880

8,775

6,170

3,234

2,682

880

OpenJDK 11

54,316

50,120

140,816

11,129

4,927

6,071

8,996

6,383

3,336

3,087

1,125

区别

-1.2%

-4.6%

14.8%

-16.8%

2.2%

3.2%

2.5%

3.5%

3.2%

15.1%

27.8%

平均

4.5%

使用并行垃圾收集器,结果的确定性不及G1。 有些数据集有所改进,而另一些数据集则保持不变,甚至表现出性能下降。 但是,平均而言,Java 11的性能要高出4%以上。

Java 11上的并行GC与G1 GC

云平衡

机器重新分配

课程安排

考试安排

护士名册

巡回赛

Java 11

200度

800c

B1

B10

c7

c8

s2

s3

m1

1小时

14天

OpenJDK 11并行GC

54,316

50,120

140,816

11,129

4,927

6,071

8,996

6,383

3,336

3,087

1,125

OpenJDK 11 G1 GC

41,753

41,282

166,676

20,363

4,473

5,466

8,157

5,927

2,772

2,536

957年

区别

-23.1%

-17.6%

18.4%

83.0%

-9.2%

-10.0%

-9.3%

-7.1%

-16.9%

-17.8%

-14.9%

平均

-2.3%

尽管与并行GC相比,G1 GC在Java 8方面显示出明显的改进,但对于大多数数据集而言,OptaPlanner的GC策略效益较低。 唯一的例外是机器重新分配,这表明G1 OptaPlanner能够更快地计算分数计算83%。 这也适用于Java 8,如使用G1 GC的“分数计算每秒计数”所示。

结论

Java 11带来了其他改进,这些改进在不同的OptaPlanner示例和数据集之间有所不同。 平均而言,使用并行GC的速度要快4.5%,使用G1 GC的速度要快16.1%。 尽管G1 GC有了显着改进,但在此基准测试中,大多数数据集的并行GC仍然更快。

go比java快多少