环境
1.机器型号:MacBook Pro (Retina, 15-inch, Mid 2015)
2.CPU型号:2.5 GHz Intel Core i7
3.操作系统:macOS 10.12.5 (16F73)
4.内核版本:Darwin 16.6.0
5.JDK版本:java version "1.8.0_101"(重要,jdk版本不同hsdis库可能要重新编译)
相关源码
1.jdk8地址:http://hg.openjdk.java.net/jdk8/jdk8
2.JITWatch源码:https://github.com/AdoptOpenJDK/jitwatch
预备知识
1.hsdis:查看JIT编译汇编代码,目录位置:jdk8/hotspot/src/share/tools/hsdis
2.JVM相关参数:
-server 表示jvm以C2编译器编译
-Xcomp 以编译模式运行,默认为mix
-XX:+TraceClassLoading 打印类加载日志
-XX:+PrintAssembly 打印汇编代码,需要hsdis支持
-XX:LogFile=path/jit.log 将jvm输出日志输入到jit.log中
3.JITWatch 开源分析jvm汇编命令工具
安装
一、hsdis编译安装
1.cd hotspot/src/share/tools/hsdis #jdk8源码中
2.下载binutils源码:(编译hsdis需要,jdk8需要2.26版本/jdk7则为2.24版本)
wget http://ftp.heanet.ie/mirrors/gnu/binutils/binutils-2.26.tar.gz
tar -xvf ./binutils-2.26.tar.gz
3.此步骤操作均在hsdis目录下:
export CPP=/usr/bin/cpp #这里需要先设置环境变量CPP,否则make时会报错
make BINUTILS=binutils-2.26 ARCH=amd64 #编译hsdis
mac下可能会有一下报错:
fatal error: sys/types.h: No such file or directory
解决:
xcode-select --install #按弹出框提示安装,注意,这里需要先安装xcode
安装完成后再次执行make BINUTILS=binutils-2.26 ARCH=amd64
4.hsdis编译完成:
对应lib目录为./build/macosx-amd64/hsdis-amd64.dylib
设置环境变量:
sudo vi /etc/profile
LD_LIBRARY_PATH="/Volumes/home/Users/preideas/work/jit"
5.检验hsdis库是否生效:
java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -version > 1.txt
说明:
这里因为以上命令输出过多,所以重定向至1.txt
若看到以下输出,则说明hsdis安装成功:
二、JITWatch安装:
1.下载源码:
git clone https://github.com/AdoptOpenJDK/jitwatch.git
2.编译:
cd jitwatch
ant clean compile test run #已安装maven环境的,也可以执行mvn clean compile test exec:java
3.启动:(仍在jitwatch目录下)
sh launchUI.sh
Eclipse参数配置
1.在要运行的java类上:右键-->run as -->run configurations-->Arguments,填入以下参数;
-server -Xcomp -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly -XX:+LogCompilation -XX:+TraceClassLoading -XX:LogFile=/Volumes/home/Users/work/jit/jit.log
说明:
-XX:LogFile参数中path根据自己机器设置
JITWatch使用
1.将eclipse中生成的jit.log导入jitwatch,效果如下:
2.点击1图中TriView效果如下:
说明:
从上图可看出volatile关键,使用了cpu的lock指令
附录
1.mac已编译hsdis-amd64库(见附件)
2.mac已编译hsdis-i386库(见附件)
相关推荐
mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk1.8安装包!mac系统jdk...
Java编译器在JDK 1.8中提升了类型推断的能力,使得在编写泛型代码时可以更少地指定类型信息,尤其是与Lambda表达式结合使用时。 10. **Comcompact Profile**: JDK 1.8引入了JRE的轻量级版本——JRE Compact ...
现在,你已经在Mac OS上安装了JDK 1.8,可以开始使用Java开发工具,如`javac`编译器和`java`解释器。例如,创建一个简单的`HelloWorld.java`文件,用`javac`编译它,然后用`java`运行: ```bash echo "public class...
JDK1.8 Java 代码开发规范 JDK1.8 Java 代码开发规范是指在 Java 开发过程中遵守的一系列编程规约和约定,以确保代码的可读性、可维护性和可靠性。该规范涵盖了编程规约、异常日志、命名风格、常量定义、代码格式、...
- **兼容性**:虽然JDK 1.8在大多数情况下与之前的版本兼容,但在某些特定场景下(如使用了默认方法的接口实现),可能会出现不兼容的情况。 - **资源管理**:随着JDK 1.8引入的新特性和API,开发者应关注如何有效地...
JDK1.8,也被称为Java Development Kit 1.8,是Oracle公司发布的一个重要的Java开发工具集,它包含了许多用于构建和运行Java应用程序所需的组件和服务。这个版本的JDK引入了一系列创新特性,极大地提升了Java语言的...
Mac版的JDK 1.8是Java Development Kit的一个特定版本,专为苹果公司的Mac OS X(现称为macOS)操作系统设计。JDK是开发和运行Java应用程序所必需的软件包,包含了编译器、调试器、Java运行时环境(JRE)以及其他...
9. ** Nashorn JavaScript引擎**:JDK1.8包含了Nashorn JavaScript引擎,允许Java代码直接执行JavaScript代码,实现了Java与JavaScript之间的互操作性。 10. **类型推断增强**:编译器在JDK1.8中的类型推断能力得到...
看大家需求 提供两种资源方式:(JDK1.8压缩包64位Windows版本)上面JDK1.8压缩包直接下载(解压一下就可以用),...无论是选择稳定成熟的JDK 1.8,还是追求最新功能和性能的JDK 17,都能够满足不同场景下的开发需求。
**JDK 1.8 API 中文 CHM** 是Java开发者的重要参考资料,它包含了Java开发工具包(JDK)1.8版本的所有公共类、接口和框架的详细文档。这个CHM(Compiled HTML Help)文件是Windows平台上的帮助文档格式,用户可以...
【标题】"dubbo admin jdk1.8" 指的是使用Java开发工具包(JDK)1.8版本运行的Dubbo管理控制台。Dubbo是阿里巴巴开源的一个高性能、轻量级的服务治理框架,它提供了服务注册、服务发现、调用监控等功能。在JDK1.8...
Java JDK 1.8 版本 Mac os M1处理器 ARM版本,下载后直接无脑安装即可。JDK for ARM。
JDK 1.8引入了一个新的JavaScript引擎Nashorn,允许Java代码直接执行JavaScript,并与Java对象交互。这对于构建混合型应用非常有用,例如`ScriptEngine engine = new ScriptEngineManager().getEngineByName(...
总的来说,JDK 1.8版本的免安装压缩包提供了方便开发者在无需完整安装过程的情况下使用Java开发环境的方式。通过解压这个文件,你可以直接将Java SDK的路径添加到系统环境变量中,即可开始编写和运行Java程序。这个...
5. **Nashorn JavaScript引擎**:JDK 1.8集成了Nashorn JavaScript引擎,可以直接在Java应用中执行JavaScript代码,促进了Java与JavaScript之间的交互。 6. **新的并发工具**:如Fork/Join框架和Parallel Streams,...
1. **Lambda表达式**:这是JDK 1.8最重要的更新之一,它简化了处理函数式接口的方式,使得代码更简洁、易读。Lambda表达式允许将匿名函数作为方法参数传递,或者用作返回值。 2. **方法引用**:与Lambda表达式...
2. **配置源兼容性**:在IDE中,可以设置项目源代码兼容性为JDK 1.7,这样可以在JDK 1.8环境下编译和运行,但不会使用1.8的新特性。 3. **调整代码**:如果无法升级Spring版本,可能需要手动修改代码以适应JDK 1.8...
此外,JDK 1.8还引入了 Nashorn JavaScript引擎,它允许Java程序直接执行JavaScript代码,促进了Java与JavaScript之间的互操作性。这对于构建混合型应用或者利用JavaScript库的Java开发者来说是一个极大的便利。 在...