如何控制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)中,类包含其对应的元数据,比如类的层级信息,方法数据和方法信息(如字节码,栈和变量大小),运行时常量池,已确定的符号引用和虚方法表. 在过去(当自定义类加载器使用不普 ...
随机推荐
- JavaWeb AJAX
1. Asynchronized JavaScript And XML 异步JavaScript和XML,它并不是一门新的语言或技术,实际是几项技术按一定的方式组合在一起共同的协作中发挥各自的作用, ...
- 移动apache访问日志后如何立即生效
一次偶然测试发现移动了apache下的access_log日志后或者修改了access_log的名称,该移动的日志或修改名称的日志文件仍记录了apache访问信息,即没有实时生效,后来查了资料才知道: ...
- 苹果公布WWDC2016时间 并做了个程序员情怀网页
新浪手机讯 4月19日上午消息,苹果公司今日正式确定2016年全球开发者大会(WWDC)开幕时间:6月13-17日,并做了个非常有意思的代码风格页面. 网友戏称这个页面只有程序员们才能看懂,它的首页是 ...
- My Game --文件读取数据
My Game --线段数据 中说到背景的绘制由贝赛尔曲线生成线段,用 DrawNode 画多边形,同时一张背景有两座山,一座山有两条以上贝赛尔曲线保存,用了嵌套的数据类:Bezier,LineLay ...
- python学习——将while循环改成函数
笨办法学python第33节 这一节主要学习内容是while循环,记录内容为将while改成函数,首先源代码如下: i = 0 numbers = [] while i < 6: print & ...
- D1.1.利用npm(webpack)构建基本reactJS项目
前提: 已经安装nodejs和npm #全局安装webpack 自动构建化工具,职能管理项目:webpack-dev-server是开发工具,提供 Hot Module Replacement 功能# ...
- Git命令使用总结
Git 教學(1):Git的基本使用 Git 教學(2):Git Branch 的操作與基本工作流程 Git 情境劇:告訴你使用 Git 時什麼情況該下什麼指令 如何安裝 Git Mac : 安裝 H ...
- Spark高级数据分析中文版-读者交流
第二章: 备注:1.本书第二章样例数据由于才有的是短链接,国内的用户可能无法下载.我把数据集拷贝到百度网盘上.大家可以从这个地方下载:http://pan.baidu.com/s/1pJvjHA7 谢 ...
- io端口与io内存详解
(一)地址的概念 1)物理地址:CPU地址总线传来的地址,由硬件电路控制其具体含义.物理地址中很大一部分是留给内存条中的内存的,但也常被映射到其他存储器上(如显存.BIOS等).在程序指令中的虚拟地址 ...
- 如何在网页中调用百度地图api
我想在木有提供地图接口的年代,前端工程师门要么只写上企业的具体地址,要么就是用一张标有自己位置的地图图片.但是现在不一样啦!为了增强用户体验,谷歌,甚至百度都很开放了,你可以在他们的网站上找到地图接口 ...