java 汇编_查看Java代码对应的汇编指令又一利器,JITWatch 转

查看Java代码对应的汇编指令又一利器,JITWatch

纠错 13 May 2015

接着上一篇文章 查看Java代码对应的汇编指令利器,hsdis 。JITWatch提供了更好的显示方式,还有各种图表,称得上又一利器。

github地址: JITWatch

git clone git@github.com:AdoptOpenJDK/jitwatch.git

cd jitwatch

mvn clean install -DskipTests=true

./launchUI.sh

我们通过一个简单的例子来看下如何使用(例子稍微复杂些,为了了解JDK8对AtomicInteger.getAndIncrement()方法做的优化),基于JDK8(jdk7的getAndIncrement()方法实现不同)

首先给出java代码,AtomicInteger_jdk8.java

import java.util.concurrent.CountDownLatch;

import java.util.concurrent.atomic.AtomicInteger;

public class AtomicInteger_jdk8 {

private final static int TEST_SIZE = 100000000;

private final static int THREAD_COUNT = 10;

private CountDownLatch cdl = new CountDownLatch(THREAD_COUNT + 1);

private AtomicInteger ai = new AtomicInteger(0);

private long startTime;

public void init() {

startTime = System.nanoTime();

}

public class MyTask implements Runnable {

@Override

public void run() {

while (true) {

if(ai.getAndIncrement() == TEST_SIZE) {

System.out.println(System.nanoTime() - startTime);

cdl.countDown();

System.exit(0);

}

}

}

}

public static void main(String[] args) {

AtomicInteger_jdk8 at = new AtomicInteger_jdk8();

at.init();

for (int n = 0; n < THREAD_COUNT; n++)

new Thread(at.new MyTask()).start();

System.out.println("start");

at.cdl.countDown();

}

}

编译执行,并输出日志(提示:需要hsdis)

javac AtomicInteger_jdk8.java

java -server -XX:+UnlockDiagnosticVMOptions -XX:+TraceClassLoading -XX:+PrintAssembly -XX:+LogCompilation -XX:LogFile=jit.log AtomicInteger_jdk8

如图所示:

327ca3ff9d99a0aa96df250463833def.png

点击Open Log选择jit.log文件

点击Start

如图,右击run()方法,点击TriView

9909def77203987981d4d64d05762875.png

AtomicInteger.getAndIncrement()方法对应的汇编指令callq。

通过JITWatch发现,getAndAddInt()已经被编译为特殊的机器指令xadd(这就是为啥jdk8比jdk7快的原因,读者可以自己看下jdk7是啥)

6e6c7d759cadb322039f6c0a2f982480.png

--------------------------------------------补充下JDK7的------------------------------------

ae9dcc1667001f38b6f9cc648f1096bf.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值