java中的空方法体_Java 11中的空方法比Java 8明显慢

我比较了JDK 8和11的性能

jmh

1.21当我遇到一些令人惊讶的数字时:

Java version: 1.8.0_192, vendor: Oracle Corporation

Benchmark Mode Cnt Score Error Units

MyBenchmark.emptyMethod avgt 25 0.362 ± 0.001 ns/op

Java version: 9.0.4, vendor: Oracle Corporation

Benchmark Mode Cnt Score Error Units

MyBenchmark.emptyMethod avgt 25 0.362 ± 0.001 ns/op

Java version: 10.0.2, vendor: Oracle Corporation

Benchmark Mode Cnt Score Error Units

MyBenchmark.emptyMethod avgt 25 0.723 ± 0.001 ns/op

Java version: 11.0.1, vendor: Oracle Corporation

Benchmark Mode Cnt Score Error Units

MyBenchmark.emptyMethod avgt 25 0.724 ± 0.002 ns/op

OpenJDK 11和12的性能与OracleJDK 11类似。为了简洁起见,我省略了他们的数字。

我理解微基准并不表示实际应用程序的性能行为。不过,我很好奇这种差异是从哪里来的。

有什么想法吗?

以下是整个基准:

XML

:

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

4.0.0

jmh

empty-method

1.0-SNAPSHOT

jar

JMH benchmark sample: Java

org.openjdk.jmh

jmh-core

${jmh.version}

org.openjdk.jmh

jmh-generator-annprocess

${jmh.version}

provided

UTF-8

1.21

1.8

benchmarks

org.apache.maven.plugins

maven-enforcer-plugin

1.4.1

enforce-versions

enforce

3.0

org.apache.maven.plugins

maven-compiler-plugin

3.8.0

${javac.target}

${javac.target}

${javac.target}

org.apache.maven.plugins

maven-shade-plugin

3.2.1

package

shade

${uberjar.name}

org.openjdk.jmh.Main

*:*

META-INF/*.SF

META-INF/*.DSA

META-INF/*.RSA

maven-clean-plugin

2.6.1

maven-deploy-plugin

2.8.2

maven-install-plugin

2.5.2

maven-jar-plugin

3.1.0

maven-javadoc-plugin

3.0.0

maven-resources-plugin

3.1.0

maven-site-plugin

3.7.1

maven-source-plugin

3.0.1

maven-surefire-plugin

2.22.0

SRC/Ma/Java/JMH/MyBenchmark.java

:

package jmh;

import org.openjdk.jmh.annotations.Benchmark;

import org.openjdk.jmh.annotations.BenchmarkMode;

import org.openjdk.jmh.annotations.Mode;

import org.openjdk.jmh.annotations.OutputTimeUnit;

import java.util.concurrent.TimeUnit;

@BenchmarkMode(Mode.AverageTime)

@OutputTimeUnit(TimeUnit.NANOSECONDS)

public class MyBenchmark

{

@Benchmark

public void emptyMethod()

{

}

}

这是我使用的特定于Windows的脚本。将其转换为其他平台应该是很简单的:

set JAVA_HOME=C:\Program Files\Java\jdk1.8.0_192

call mvn -V -Djavac.target=1.8 clean install

"%JAVA_HOME%\bin\java" -jar target\benchmarks.jar

set JAVA_HOME=C:\Program Files\Java\jdk-9.0.4

call mvn -V -Djavac.target=9 clean install

"%JAVA_HOME%\bin\java" -jar target\benchmarks.jar

set JAVA_HOME=C:\Program Files\Java\jdk-10.0.2

call mvn -V -Djavac.target=10 clean install

"%JAVA_HOME%\bin\java" -jar target\benchmarks.jar

set JAVA_HOME=C:\Program Files\Java\oracle-11.0.1

call mvn -V -Djavac.target=11 clean install

"%JAVA_HOME%\bin\java" -jar target\benchmarks.jar

我的运行时环境是:

Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T14:41:47-04:00)

Maven home: C:\Program Files\apache-maven-3.6.0\bin\..

Default locale: en_CA, platform encoding: Cp1252

OS name: "windows 10", version: "10.0", arch: "amd64", family: "windows"

更具体地说,我正在跑步

Microsoft Windows [Version 10.0.17763.195]

.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值