今天开始实战Java虚拟机之五“开启JIT编译”

总计有5个系列

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编译”的更多相关文章

  1. 实战Java虚拟机之四:提升性能,禁用System.gc() ?

    今天开始实战Java虚拟机之四:"禁用System.gc()". 总计有5个系列 实战Java虚拟机之一“堆溢出处理” 实战Java虚拟机之二“虚拟机的工作模式” 实战Java虚拟 ...

  2. 实战Java虚拟机之三“G1的新生代GC”

    今天开始实战Java虚拟机之三:“G1的新生代GC”. 总计有5个系列 实战Java虚拟机之一“堆溢出处理” 实战Java虚拟机之二“虚拟机的工作模式” 实战Java虚拟机之三“G1的新生代GC” 实 ...

  3. 实战Java虚拟机之二“虚拟机的工作模式”

    今天开始实战Java虚拟机之二:“虚拟机的工作模式”. 总计有5个系列 实战Java虚拟机之一“堆溢出处理” 实战Java虚拟机之二“虚拟机的工作模式” 实战Java虚拟机之三“G1的新生代GC” 实 ...

  4. 实战Java虚拟机之一“堆溢出处理”

    从今天开始,我会发5个关于java虚拟机的小系列: 实战Java虚拟机之一“堆溢出处理” 实战Java虚拟机之二“虚拟机的工作模式” 实战Java虚拟机之三“G1的新生代GC” 实战Java虚拟机之四 ...

  5. 实战java虚拟机的学习计划图(看懂java虚拟机)

    啥也不说了,实战java虚拟机,好好学习,天天向上!针对自己的软肋制定学习计划. 一部分内容看完,自己做的学习笔记和感想. 学java很简单,但懂java会有难度,如果你的工资还没超过1W,那是时候深 ...

  6. 实战Java虚拟机之中的一个“堆溢出处理”

    从今天開始.我会发5个关于java虚拟机的小系列: 实战Java虚拟机之中的一个"堆溢出处理" 实战Java虚拟机之二"虚拟机的工作模式" 实战Java虚拟机之 ...

  7. 你的java 代码对JIT编译友好吗?

    JIT编译器是Java虚拟机(以下简称JVM)中效率最高并且最重要的组成部分之一.但是很多的程序并没有充分利用JIT的高性能优化能力,很多开发者甚至也并不清楚他们的程序有效利用JIT的程度. 在本文中 ...

  8. 你的Java代码对JIT编译友好么?(转)

    JIT编译器是Java虚拟机(以下简称JVM)中效率最高并且最重要的组成部分之一.但是很多的程序并没有充分利用JIT的高性能优化能力,很多开发者甚至也并不清楚他们的程序有效利用JIT的程度. 在本文中 ...

  9. 【深入Java虚拟机】之七:Javac编译与JIT编译

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/18009455 编译过程 不论是物理机还是虚拟机,大部分的程序代码从开始编译到最终转化成物理 ...

随机推荐

  1. 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 ...

  2. 【Alpha】Daily Scrum Meeting第一次

    一.本次Daily Scrum Meeting主要内容 代码任务细分 服务器搭建 每个人时间分配及安排 二.项目进展 学号尾数 今天做的任务 任务完成度 明天要做的任务 612 写代码框架 30% 主 ...

  3. linux各目录的作用

  4. rabbitmq 简单梳理

    概念: 生产者(Producer,简写P),负责发布消息. “交换机”(Exchange, 简写X), 负责中转消息. 路由(Route, 简写R), 即 X->Q的路线名. 消息队列 (Que ...

  5. destoon去掉会员注册email验证

    修改文件: /module/member/member.class.php 删除61行: //if(!is_email($email)) return $this->_($L['member_e ...

  6. [k]优雅的css

    1.图片文字列表 (2016-01-25) 1.1 实现效果图如下: 1.2 代码: html:( 代码十分优雅哦! ) <ul> <li class="step1&quo ...

  7. mount挂载问题

    安装nfs-utils即可

  8. 【XLL 框架库函数】 QuitFramework

    去初使化框架库,简问题是才的重新初使化 XLOPER/XLOPER12. 参数 这个函数没有参数 属性值/返回值 这个函数没有返回值.

  9. 整合Spring、SpringMVC、MyBatis

    spring+springmvc+mybatis集成 一个核心:将对象交给spring管理. 1新建web项目 2添加项目jar包 spring包见上一篇博客 3建立项目的目录结构 4完成Mapper ...

  10. python备忘

    1.引用已经编写好的.py文件(Windows系统) >>>import sys >>>sys.path.append("C:/python") ...