`
wangwengcn
  • 浏览: 172995 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java虚拟机的运行时优化

    博客分类:
  • JVM
阅读更多

1.解释器与编译器
      在部分虚拟机(Sun HotSpot)中,Java程序是最初通过解释器进行解释执行的,当虚拟机发现某个方法或者代码块运行特别频繁,就会把这些代码认定为"热点代码"(Hot Spot Code),为了提高热点代码的执行效率,在运行时,虚拟机会将这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(Just In Time Compiler),简称JIT编译器。
       当前主流的商用虚拟机中都同时包含解释器与编译器,解释器与编译器两者各有优势:
       当程序需要迅速启动和执行时,解释器可以首先发挥作用,省去编译的时间,立即执行。
       当程序运行后,随着时间的推移,编译器逐渐发挥作用,把越来越多的代码编译成本地代码后,可以获得更高的执行效率。
       HotSpot虚拟机内置了两个即时编译器,称为Client Compiler和Server Compiler,简称为C1和C2编译器。默认采用解释器和其中一个编译器直接配合的方式工作,程序使用哪个编译器取决于虚拟机运行的模式,用户也可以使用-client和-server参数去强制指定虚拟机运行在Client模式还是Server模式
      无论采用那种编译器,解释器与编译器搭配使用的方式在虚拟机中称为"混合模式"(Mixed Mode),用户可以使用参数-Xint强制虚拟机运行于"解释模式",这时候编译器完全不介入工作,全部代码都使用解释方式执行。
      也可以使用参数-Xcomp强制虚拟机运行于"编译模式"(Compiled Mode),这时候将优先使用编译方式执行程序,但是解释器仍然要在编译无法进行进行的情况下介入执行过程,可以通过java -version查看当前模式。
      为了在程序启动响应速度和运行效率之间达到最佳平衡,HotSpot虚拟机将会逐渐启用分层编译的策略,分层编译在1.6中出现,后来一直处于改进阶段,最终在1.7的server模式虚拟机中作为默认编译策略被开启。
      第0层:程序解释执行,解释器不开启性能监控功能,可触发第1层编译。
      第1层:也称为C1编译,将字节码编译为本地代码,进行简单可靠的优化,如有必要将加入性能监控的逻辑。
      第2层:也称为C2编译,也是将字节码编译为本地代码,但是会启用一些编译耗时较长的优化,甚至会根据性能监控信息进行一些不可靠的激进优化。
      这个过程中用C1编译器获得更高的编译速度,用C2编译器来获取更好的编译质量。

2.编译对象与触发条件
      前文提到的热点代码有两类:
     1.被多次调用的方法
     2.被多次执行的循环体
     循环体和方法一样,在进行编译时都是以整个方法作为编译对象(而不是单独的循环体)。
     要知道一段代码是不是热点代码,是不是需要触发即时编译,这个行为称为热点探测,目前主要的探测判定方式有两种:
     1.基于采样的热点探测:虚拟机周期性的检查各个线程的栈顶,如果发现某个方法经常出现在栈顶,那这个方法就是热点方法。
     2.基于计数器的热点探测:虚拟机会为每个方法建立计数器,统计方法的执行次数,如果执行次数超过一定的阀值就认为它是热点代码。
     HotSpot虚拟机就是采用了第2种探测方式,因此它为每个方法准备了两个计数器:方法调用计数器和回边计数器(统计方法内部循环体执行次数)。这两个阀值都可以通过参数来设置(P292)。
     当超过一定的时间限度,如果方法的调用次数仍然不足以让它提交给即时编译器编译,那这个方法的调用计数器就会被减少一半,这个过程被称为调用计数器的热度衰减,而这段时间就称为此方法统计的半衰期,进行热度衰减的动作是在虚拟机进行垃圾回收时顺便进行的,可以使用参数-XX:-UseCounterDecay来关闭热度衰减,让方法计数器统计调用次数的绝对次数。还可以使用参数-XX:CounterHalfLifeTime设置半衰周期,单位是秒。回边计数器没有热度衰减。

3.编译过程
      虚拟机的编译过程都是在后台运行的,用户也可以通过参数-XX:-BackgroundCompilation来禁止后台编译,禁止后台编译以后,当达到JIT的编译条件,执行线程向虚拟机提交编译请求后将会一直等待,直到编译过程完成后再开始执行编译器输出的本地代码。

方法调用:

 

 

回边调用:

分享到:
评论

相关推荐

    精品:java虚拟机分析与优化PPT

    java虚拟机分析与优化PPT(演讲:李镭) 李镭——现任IBM中国有限公司软件部WebSphere高级工程师。 2002年加入IBM公司软件部,至今一直从事中间件产品家族的售前和售后工作。为IBM的重要合作伙伴提供软件的技术支持和...

    实战Java虚拟机.pdf_java_

    随着越来越多的第三方语言(Groovy、Scala、JRuby等)在Java虚拟机上运行,Java...《实战Java虚拟机——JVM故障诊断与性能优化》将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。

    实战Java虚拟机——JVM故障诊断与性能优化 pdf

    《实战Java虚拟机——JVM故障诊断与性能优化》内容简介:随着越来越多的第三方语言(Groovy、Scala、JRuby等)在Java虚拟机上运行,Java也俨然成为一个充满活力的生态圈。本书将通过200余示例详细介绍Java虚拟机中的...

    实战JAVA虚拟机

    《实战Java虚拟机——JVM故障诊断与性能优化》将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。, 《实战Java虚拟机——JVM故障诊断与性能优化》共11章。第1~3章介绍了Java...

    实战java虚拟机

    《实战Java虚拟机——JVM故障诊断与性能优化》将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。 《实战Java虚拟机——JVM故障诊断与性能优化》共11章。第1~3章介绍了Java...

    实战JAVA虚拟机 JVM故障诊断与性能优化

    本书将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。  本书共11章。第1~3章介绍了Java虚拟机的定义、总体架构、常用配置参数。第4~5章介绍了垃圾回收的算法和各种垃圾回收器...

    实战Java虚拟机——JVM故障诊断与性能优化

    《实战Java虚拟机——JVM故障诊断与性能优化》将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。, 《实战Java虚拟机——JVM故障诊断与性能优化》共11章。第1~3章介绍了Java...

    实战JAVA虚拟机++JVM故障诊断与性能优化.pdf

    《实战Java虚拟机——JVM故障诊断与性能优化》将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。 《实战Java虚拟机——JVM故障诊断与性能优化》共11章。第1~3章介绍了Java...

    实战JAVA虚拟机__JVM故障诊断与性能优化.pdf

    随着越来越多的第三方语言(Groovy、Scala、JRuby等)在Java虚拟机上运行,Java...《实战Java虚拟机——JVM故障诊断与性能优化》将通过200余示例详细介绍Java虚拟机中的各种参数配置、故障排查、性能监控以及性能优化。

    Java虚拟机中冷对象的研究_骆凡.caj

    以虚拟机的优化变成了一个很重要的问题。 许多 Java 应用程序在 Java 堆中实例化的对象是持久的,但几乎从来不被应用程 序引用。例子包括字符串 , 错误消息 , 和对象集合,它们为了快速访问而进行预加载 , 但...

    自己动手写Java虚拟机及class文件解析分析工具(java8运行)

    用go语言写的java虚拟机,主要是清楚的表达了jvm的原理。不懂go语言的其实也没关系,其中classpy这个可执行的jar文件,可以清楚的展现出class文件的结构

    JVM优化|java虚拟机优化

    - 掌握jvm的运行参数以及参数的设置 - 掌握jvm的内存模型(堆内存) - 掌握jamp命令的使用以及通过MAT工具进行分析 - 掌握定位分析内存溢出的方法 - 掌握jstack命令的使用 - 掌握VisualJVM工具的使用 - 了解什么是...

    java虚拟机知识点整理

    自己看书整理的 java虚拟机精品知识点 java内存区域与内存溢出处理 虚拟机栈和本地方法栈区别 对象定位访问 垃圾收集器GC管理 虚拟机GC垃圾回收收集算法(内存回收方法论) 虚拟机GC垃圾回收收集器(内存回收具体实现...

    论文研究-面向普适计算终端的Java虚拟机性能优化技术研究.pdf

    分析了解释运行中利用线索化方法进行性能优化的技术,实现了以直接线索化方法为基础的Java虚拟机的解释器性能优化方案,并对嵌入式Java虚拟机的参考实现和Java的优化实现进行了性能对比。

    JVM(Java虚拟机)

    JVM(Java虚拟机)的整个流程:发展,运行区域,垃圾回收器,内存分配策略,垃圾收集,JVM分析工具,JVM优化

    java虚拟机

    基本原理:剖析 Java 虚拟机的运行机制,逐一介绍 Java 虚拟机的设计决策以及工程实现; 高效实现:探索 Java 编译器,以及内嵌于 Java 虚拟机中的即时编译器,帮助你更好地理解 Java 语言特性,继而写出简洁高效的...

    深入JAVA虚拟机第二版(中文版)

    理解了Java虚拟机,深入细致的了解了Java技术底层,才能使自己的程序发挥Java技术的优势。 本书详细解释了JVM的体系结构,包括Java栈、堆、方法区和执行引擎,还深入讨论了各种技术实现,比如解释,即时编译以及...

    Java虚拟机内存优化实践

    前面一篇文章介绍了Java虚拟机的体系结构和内存模型,既然提到内存,不得不说到内存泄露。众所周知,Java是从C++的基础上发展而来的,而C++程序的很大的一个问题是内存泄露难以解决,尽管Java的JVM有一套自己的垃圾...

Global site tag (gtag.js) - Google Analytics