查看Java代码对应的汇编指令又一利器,JITWatch 转
2017-05-26 20:28
344 查看
http://www.tuicool.com/articles/IRrIRb3
时间 2015-05-13 08:00:00 Liuxinglanyue's Blog原文 http://javagoo.tk/java/jitwatch_code.html
主题 JDK
查看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
如图所示:
点击Open Log选择jit.log文件
点击Start
如图,右击run()方法,点击TriView
AtomicInteger.getAndIncrement()方法对应的汇编指令callq。
通过JITWatch发现,getAndAddInt()已经被编译为特殊的机器指令xadd(这就是为啥jdk8比jdk7快的原因,读者可以自己看下jdk7是啥)
--------------------------------------------补充下JDK7的------------------------------------
相关文章推荐
- MyEclipse在哪里查看JSP转化为Servlet时的对应Java代码?
- 浅析VS2010反汇编 VS 反汇编方法及常用汇编指令介绍 VS2015使用技巧 调试-反汇编 查看C语言代码对应的汇编代码
- 怎么查看Java代码对应的汇编
- 关于在jsp页面写java代码的分析(限定用户查看相关的信息)
- java 代码查看证书信息
- 查看磁盘剩余空间:Java代码改进
- oracle的错误代码如何查看对应的错误信息
- 下面的代码在命令行输入,然后选择图纸上的Polyline2d,查看组码0对应的DXF值
- java DotNet char 代码对应
- 根据wsdl文件或者wsdl地址生成对应的java代码
- 推荐个Java代码质量检测的利器 —— FindBugs
- Java swing 窗口最小化到任务栏 点击右键显示菜单(复制代码即可运行查看效果)
- 通过MySQL自带工具perror查看错误代码对应的信息
- java读取Excel导出Html对应的table代码
- java DotNet char 代码对应
- Lombok — Java代码自动生成 开发利器
- weblogic jsp 编译:查看编译后的java中间代码
- 根据wsdl生成对应的Java代码进行接口测试(一)
- “深入查看代码”工具 - Code Review(Java)
- Java工程查看代码出现乱码解决