【深入理解Java 虚拟机之 即时编译器】1124 查看分析即时编译结果

一、概述

1、Java虚拟机的即时编译过程对用户和程序都是完全透明的,虚拟机是通过解释来执行代码还是通过编译来执行代码,对于用户来说并没有什么影响(对执行结果没有影响,速度上会有显著差别),大多数情况下用户也没有必要知道。但是HotSpot虚拟机还是提供了一些参数用来输出即时编译和某些优化措施的运行状况,以满足调试和调优的需要。

二、查看

1、要知道某个方法是否被编译过,可以使用参数-XX:+PrintCompilation要求虚拟机在即时编译时将被编译成本地代码的方法名称打印出来。

VM option '+PrintCompilation'

2、们还可以加上参数-XX:+PrintInlining要求虚拟机输出方法内联信息

Unrecognized option: -XX:+PrintInlining
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
 

3、接入各种平台下的反汇编适配器,如使用32位x86平台应选用hsdis-i386适配器,64位则需要选用hsdis-amd64[插图],其余平台的适配器还有如hsdis-sparc、hsdis-sparcv9和hsdis-aarch64等,读者可以下载或自己编译出与自己机器相符合的反汇编适配器,之后将其放置在JAVA_HOME/lib/amd64/server下[插图],只要与jvm.dll或libjvm.so的路径相同即可被虚拟机调用。为虚拟机安装了反汇编适配器之后,我们就可以使用-XX:+PrintAssembly参数要求虚拟机打印编译方法的汇编代码了

4、没有HSDIS插件支持,也可以使用-XX:+PrintOptoAssembly(用于服务端模式的虚拟机)或-XX:+PrintLIR(用于客户端模式的虚拟机)来输出比较接近最终结果的中间代码表示,代码清单11-2所示代码被编译后部分反汇编(使用-XX:+PrintOptoAssembly)的输出结果如代码清单11-5所示。对于阅读来说,使用-XX:+PrintOptoAssembly参数输出的伪汇编结果包含了更多的信息(主要是注释),有利于人们阅读、理解虚拟机即时编译器的优化结果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值