【Java】实战Java虚拟机之五“开启JIT编译”
今天开始实战Java虚拟机之五“开启JIT编译”
总计有5个系列
- 实战Java虚拟机之一“堆溢出处理”
- 实战Java虚拟机之二“虚拟机的工作模式”
- 实战Java虚拟机之三“G1的新生代GC”
- 实战Java虚拟机之四“禁用System.gc()”
- 实战Java虚拟机之五“开启JIT编译”
Java虚拟机有3种执行方式,分别是解释执行、混合模式和编译执行,默认情况下处于混合模式中。使用命令行java –version可以查看虚拟机的执行模式:
C:\Users\Administrator>java -version
java version "1.7.0_13"
Java(TM) SE Runtime Environment (build1.7.0_13-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01,mixed mode)
上面输出的“mixed mode”就表示混合模式。在混合模式中,部分函数会被解释执行,部分可能被编译执行。虚拟机决定函数是否需要编译执行的依据是判断该函数,是否为热点代码。如果函数的调用频率很高,被反复使用,那么就会被认为是热点,热点代码就会被编译执行。
解释执行模式表示全部代码均解释执行,不做任何JIT编译,可以使用参数-Xint来开启解释执行模式:
C:\Users\Administrator>java -Xint -version
java version "1.7.0_13"
Java(TM) SE Runtime Environment (build1.7.0_13-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01,interpreted mode)
编译执行模式和解释执行模式相反,对于所有的函数,无论是否是热点代码,都会被编译执行,使用参数-Xcomp可以设置为编译模式:
C:\Users\Administrator>java -Xcomp -version
java version "1.7.0_13"
Java(TM) SE Runtime Environment (build1.7.0_13-b20)
Java HotSpot(TM) 64-Bit Server VM (build 23.7-b01,compiled mode)
一般来说,编译模式的执行效率会远远高于解释模式。更多的示例参考《实战Java虚拟机》一书。
【示例11-36】下面的代码不停计算圆周率的数值,并给出了运行的耗时:
public static double calcPi(){
doublere=0;
for(inti=1;i<10000;i++){
re+=((i&1)==0?-1:1)*1.0/(2*i-1);
}
returnre*4;
}
public static void main(String[] args) {
longb=System.currentTimeMillis();
for(inti=0;i<10000;i++)
calcPi();
longe=System.currentTimeMillis();
System.out.println("spend:"+(e-b)+"ms");
}
使用虚拟机参数-Xint运行以上代码,输出:
spend:2794ms
使用虚拟机参数-Xcomp运行以上代码,输出:
spend:1082ms
很明显,在本例中使用编译运行要比解释运行快大约3倍。
《实战java虚拟机》一书Q交流群:397196583
【Java】实战Java虚拟机之五“开启JIT编译”的更多相关文章
- 实战Java虚拟机之四:提升性能,禁用System.gc() ?
今天开始实战Java虚拟机之四:"禁用System.gc()". 总计有5个系列 实战Java虚拟机之一“堆溢出处理” 实战Java虚拟机之二“虚拟机的工作模式” 实战Java虚拟 ...
- 实战Java虚拟机之三“G1的新生代GC”
今天开始实战Java虚拟机之三:“G1的新生代GC”. 总计有5个系列 实战Java虚拟机之一“堆溢出处理” 实战Java虚拟机之二“虚拟机的工作模式” 实战Java虚拟机之三“G1的新生代GC” 实 ...
- 实战Java虚拟机之二“虚拟机的工作模式”
今天开始实战Java虚拟机之二:“虚拟机的工作模式”. 总计有5个系列 实战Java虚拟机之一“堆溢出处理” 实战Java虚拟机之二“虚拟机的工作模式” 实战Java虚拟机之三“G1的新生代GC” 实 ...
- 实战Java虚拟机之一“堆溢出处理”
从今天开始,我会发5个关于java虚拟机的小系列: 实战Java虚拟机之一“堆溢出处理” 实战Java虚拟机之二“虚拟机的工作模式” 实战Java虚拟机之三“G1的新生代GC” 实战Java虚拟机之四 ...
- 实战java虚拟机的学习计划图(看懂java虚拟机)
啥也不说了,实战java虚拟机,好好学习,天天向上!针对自己的软肋制定学习计划. 一部分内容看完,自己做的学习笔记和感想. 学java很简单,但懂java会有难度,如果你的工资还没超过1W,那是时候深 ...
- 实战Java虚拟机之中的一个“堆溢出处理”
从今天開始.我会发5个关于java虚拟机的小系列: 实战Java虚拟机之中的一个"堆溢出处理" 实战Java虚拟机之二"虚拟机的工作模式" 实战Java虚拟机之 ...
- 你的java 代码对JIT编译友好吗?
JIT编译器是Java虚拟机(以下简称JVM)中效率最高并且最重要的组成部分之一.但是很多的程序并没有充分利用JIT的高性能优化能力,很多开发者甚至也并不清楚他们的程序有效利用JIT的程度. 在本文中 ...
- 你的Java代码对JIT编译友好么?(转)
JIT编译器是Java虚拟机(以下简称JVM)中效率最高并且最重要的组成部分之一.但是很多的程序并没有充分利用JIT的高性能优化能力,很多开发者甚至也并不清楚他们的程序有效利用JIT的程度. 在本文中 ...
- 【深入Java虚拟机】之七:Javac编译与JIT编译
转载请注明出处:http://blog.csdn.net/ns_code/article/details/18009455 编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理 ...
随机推荐
- Mac Pro 编译安装 Redis-3.2.3
Redis官方下载地址:http://redis.io/download Redis安装 cd /usr/local/src/redis-3.2.3 sudo make sudo make insta ...
- 【Alpha】Daily Scrum Meeting第一次
一.本次Daily Scrum Meeting主要内容 代码任务细分 服务器搭建 每个人时间分配及安排 二.项目进展 学号尾数 今天做的任务 任务完成度 明天要做的任务 612 写代码框架 30% 主 ...
- linux各目录的作用
- rabbitmq 简单梳理
概念: 生产者(Producer,简写P),负责发布消息. “交换机”(Exchange, 简写X), 负责中转消息. 路由(Route, 简写R), 即 X->Q的路线名. 消息队列 (Que ...
- destoon去掉会员注册email验证
修改文件: /module/member/member.class.php 删除61行: //if(!is_email($email)) return $this->_($L['member_e ...
- [k]优雅的css
1.图片文字列表 (2016-01-25) 1.1 实现效果图如下: 1.2 代码: html:( 代码十分优雅哦! ) <ul> <li class="step1&quo ...
- mount挂载问题
安装nfs-utils即可
- 【XLL 框架库函数】 QuitFramework
去初使化框架库,简问题是才的重新初使化 XLOPER/XLOPER12. 参数 这个函数没有参数 属性值/返回值 这个函数没有返回值.
- 整合Spring、SpringMVC、MyBatis
spring+springmvc+mybatis集成 一个核心:将对象交给spring管理. 1新建web项目 2添加项目jar包 spring包见上一篇博客 3建立项目的目录结构 4完成Mapper ...
- python备忘
1.引用已经编写好的.py文件(Windows系统) >>>import sys >>>sys.path.append("C:/python") ...