如何控制JVM中的JIT行为?
首先交代一下我自己的测试环境:
Ubuntu 12.04 x86-64,OpenJDK 7 64-bit Server VM(mixed mode)
MacOS 10.11,HotSpot 7 64-bit Server VM(mixed mode)
1.如何关闭JIT?
一般情况下,JIT是默认开启的,所以这里只存在如何关闭的问题。
在启动JVM的时候,只需增加-Xint或者-Djava.compiler=NONE选项即可:
java -Xint your_main_class_file_name
java -Djava.compiler your_main_class_file_name
如果是从Eclipse启动,则需要在Run Configurations中指定上述参数。
2.如何查看JIT生成的汇编代码?
有的时候,我们需要查看JIT生成的汇编代码,来观察JIT如何影响代码的执行。
完成这项任务,需要安装一个支持库,hsdis,步骤如下。
Linux系统:
下载linux-hsdis-amd64.so或者linux-hsdis-i386.so
重命名为hsdis-amd64.so或者hsdis-i386.so
拷贝至$JAVA_HOME/jre/lib/amd64/目录
我的机器上是/usr/lib/jvm/java-7-openjdk-amd64/jre/lib/amd64/
OS X系统:
下载gnu-bsd-libhsdis-amd64.dylib或者gnu-bsd-libhsdis-i386.dylib
重命名为hsdis-amd64.dylib或者hsdis-i386.dylib
拷贝至$JAVA_HOME/jre/lib/目录
我的机器上是/Library/Java/JavaVirtualMachines/jdk1.7.0_79.jdk/Contents/Home/jre/lib/hsdis-amd64.dylib
安装完支持库之后,在启动JVM的时候,只需增加以下两个选项即可:
java -XX:+UnlockDiagnosticVMOptions -XX:+PrintAssembly your_main_class_file_name
下面这个链接对此有详细说明,可以参考:
https://wiki.openjdk.java.net/display/HotSpot/PrintAssembly
另外,如果不安装支持库的话,指定上述选项并启动JVM时会有如下错误:
Java HotSpot(TM) 64-Bit Server VM warning: PrintAssembly is enabled; turning on DebugNonSafepoints to gain additional output
Could not load hsdis-amd64.dylib; library not loadable; PrintAssembly is disabled
如何控制JVM中的JIT行为?的更多相关文章
- JVM中的JIT
JVM中的JIT 介绍Java虚拟机的文章或者书籍总会提到Java虚拟机中的JIT编译器,可是JIT编译器到底是什么?为什么需要JIT编译呢? JIT编译器,是Just In Time编译的意思,又称 ...
- (转载)JVM中的内存模型与垃圾回收
转载自微信公众号:Java高级架构(Java-jiagou)-----看完这篇文章,我奶奶都知道JVM中的内存模型与垃圾回收了! 六.内存模型 6.1 内存模型与运行时数据区 Java虚拟机在执行J ...
- 《深入Java虚拟机学习笔记》- 第7章 类型的生命周期/对象在JVM中的生命周期
一.类型生命周期的开始 如图所示 初始化时机 所有Java虚拟机实现必须在每个类或接口首次主动使用时初始化: 以下几种情形符合主动使用的要求: 当创建某个类的新实例时(或者通过在字节码中执行new指令 ...
- 改变JVM中的参数以提高Eclipse的运行速度
首先建立评估体系,将workspace里所有的项目close掉,关闭eclipse.优化的用例就是启动eclipse,open一个项目,eclipse会自动build这个项目,保证没有感觉到明显的卡, ...
- JVM中内存回收深入分析,各种垃圾收集器
JVM启动有两种模式,client和server 一般JVM启动时会根据主机情况分析选择采用那种模式启动 可发现是server模式 JVM中尤其需要关注的就是HEAP堆区 堆区分为新生代和老年代 新生 ...
- JVM中对象的回收过程
当我们的程序开启运行之后就,就会在我们的java堆中不断的产生新的对象,而这是需要占用我们的存储空间的,因为创建一个新的对象需要分配对应的内存空间,显然我的内存空间是固定有限的,所以我们需要对没有 ...
- JVM中的垃圾回收
GC 垃圾回收回收什么 Java的内存分配原理与C/C++不同.C/C++每次申请内存时都要malloc进行系统调用.而系统调用发生在内核空间,每次都要中断进行切换,这须要一定的开销. 而Java虚拟 ...
- JVM中的STW和CMS
Java中Stop-The-World机制简称STW,是在执行垃圾收集算法时,Java应用程序的其他所有线程都被挂起(除了垃圾收集帮助器之外).Java中一种全局暂停现象,全局停顿,所有Java代码停 ...
- 对于JVM中方法区,永久代,元空间以及字符串常量池的迁移和string.intern方法
在Java虚拟机(以下简称JVM)中,类包含其对应的元数据,比如类的层级信息,方法数据和方法信息(如字节码,栈和变量大小),运行时常量池,已确定的符号引用和虚方法表. 在过去(当自定义类加载器使用不普 ...
随机推荐
- 【 2013 Multi-University Training Contest 7 】
HDU 4666 Hyperspace 曼哈顿距离:|x1-x2|+|y1-y2|. 最远曼哈顿距离,枚举x1与x2的关系以及y1与y2的关系,取最大值就是答案. #include<cstdio ...
- Spring init-method和destroy-method 的使用
Spring init-method和destroy-method 的使用 Spring 为了满足开发者在执行某方法之前或者在结束某个任务之前需要操作的一些业务,则提供了init-method和des ...
- eclipse 字体、背景、自动提示设置
1 字体设置 点击最上面菜单栏的“Window”---“preferences”弹出属性界面 General--- Appearance---Colors and Fronts,找到Java 选择“ ...
- MicroERP开发技术分享:vsFlexGrid、scriptControl实现工资表自定义列与表间关系计算
开发大型的MIS系统,肯定是离不开第三方控件的,同时也要根据项目需要自己写几个. MicroERP共用了以下几个控件: 第三方商业控件: vsFlexGrid:大名鼎鼎的表格控件,不用多说,配合vsP ...
- Ubuntu 安装和使用 Zip – rar – 7zip
http://www.rongxuan.org/2013/08/13/ubuntu-%E5%AE%89%E8%A3%85%E5%92%8C%E4%BD%BF%E7%94%A8-zip-rar-7zip ...
- AX2012导Demo数据
看到这篇文章后http://www.cnblogs.com/duanshuiliu/archive/2012/07/18/2597645.html,为了大家的方便就分享下 关于AX2012的导Demo ...
- C++与Java的语法区别
C++与Java的语法区别 首先,两个大的不同是主函数和怎样编译的不同,接下来是许多小的区别. main 函数C++//自由浮动的函数int main( int argc, char* argv[]) ...
- EF实体框架数据操作基类(转)
//----------------------------------------------------------------// Copyright (C) 2013 河南禄恒软件科技有限公司 ...
- Linq中关键字的作用及用法
Linq中关键字的作用及用法 1.All:确定序列中的所有元素是否都满足条件.如果源序列中的每个元素都通过指定谓词中的测试,或者序列为空,则为 true:否则为 false. Demo: 此示例使用 ...
- java install
http://www.cnblogs.com/a2211009/p/4265225.html