java8 快排
Java SE 8已于昨天发布 。 传统上,每个新的主要JRE版本都提供免费的性能提升。 我们还能再获得免费午餐吗? 这次收益有多大?
让我们对其进行基准测试。
基准方法
- 使用3个不同的JRE版本(SunJDK
1.6.0_26
,OpenJDK1.7.0_51
和OpenJDK1.8.0
)运行相同的代码。 该代码本身是为Java 6编写的(在语法和JDK API的用法上),并为带有OpenJDK 1.7的Java 6进行了编译。 - 每次运行大约需要55分钟。
- VM参数:
-Xmx1536M -server
软体:Linux 3.2.0-59-generic-pae
硬件:Intel® Xeon® CPU W3550 @ 3.07GHz
- 每次运行都能使用OptaPlanner解决13个计划问题。 每个计划问题需要运行5到几分钟。 并行解决多达2个计划问题。
- 解决计划问题不涉及任何IO (启动期间要加载输入的几毫秒除外)。 一个CPU完全饱和。 它会不断创建许多短命的对象,然后GC会收集它们。
- 基准衡量每毫秒可以计算的分数数量。 越高越好。 为提议的规划解决方案计算分数并非易事:涉及许多计算,包括检查每个实体与每个其他实体之间的冲突。
要在本地重现此基准, 请从源代码构建optaplanner并运行主类GeneralOptaPlannerBenchmarkApp 。
基准结果
执行摘要
我的观察:
- 在最大的数据集(Machine Reassignment B10)上,它使任何其他数据集的大小都相形见war,Java 8比Java 7快
20%
,已经比Java 6快17%
。 - 在某些情况下,Java 8的速度比Java 7慢。特别是对于课程安排数据集,Java 8的速度比Java 7慢
6%
。希望Java 8的新版本能尽快解决此性能6%
问题。 - 平均而言,Java 8仅比Java 7快
1%
。而Java 7已经比Java 6快16%
。 - 尽管这是OpenJDK 8的第一个最终版本,但我在Java 8中没有发现任何回归。OptaPlanner的示例是100%可再现的,因此,正如预期的那样,不同的JRE在每次迭代中都给出完全相同的结果。
原始基准数字
JDK | 云平衡200c | 云平衡800c | 机器重新分配B1 | 机器重新分配B10 | 课程安排c7 | 课程安排c8 | 考试安排S2 | 考试安排S3 | 护士名册M1 | 护士排班MH1 | 体育赛事安排NL14 |
---|---|---|---|---|---|---|---|---|---|---|---|
SunJDK 1.6.0_26 | 46462 | 44963 | 94567 | 28655 | 5473 | 6989 | 6954 | 3785 | 3232 | 2948 | 1977年 |
OpenJDK 1.7.0_51 | 53683 | 49798 | 116553 | 33733 | 6182 | 7848 | 8243 | 4606 | 3645 | 3377 | 2445 |
OpenJDK 1.8.0 | 54687 | 51625 | 135102 | 40529 | 5798 | 7357 | 8048 | 4441 | 3637 | 3324 | 2321 |
6⇒7 | 15.54% | 10.75% | 23.25% | 17.72% | 12.95% | 12.29% | 18.54% | 21.69% | 12.78% | 14.55% | 23.67% |
7⇒8 | 1.87% | 3.67% | 15.91% | 20.15% | -6.21% | -6.26% | -2.37% | -3.58% | -0.22% | -1.57% | -5.07% |
数据集规模 | 12万 | 1920k | 50万 | 250000k | 21.7万 | 14.5万 | 1705千 | 1613k | 18k | 12k | 4k |
结论
在大型数据集上,Java 8显然更快。 而且这无需更改代码行。 平均而言,结果令人信服(使用当前版本),但是始终欢迎免费午餐。
翻译自: https://www.javacodegeeks.com/2014/04/how-much-faster-is-java-8.html
java8 快排