zoukankan      html  css  js  c++  java
  • java-运行期优化

    由于编译执行会占用用户程序的执行时间,所以如果想让程序快速的执行,那么使用解释执行。

    在虚拟机默认混合模式下面,程序刚开始的时候都是解释执行,会将一些热点代码进行编译执行,

    生成本地机器码。下次执行热点代码的时候,直接编译执行机器码,缩短程序执行时间。

    JVM通过计数器进行计数,当代码执行的次数超过阈值的时候,会向编译器提交编译的请求。

    程序不会等待编译器编译执行完毕,而是继续以解释执行的方式执行。之后,如果编译执行完毕,下次程序执行的时候,会去执行编译执行生成的机器码。

    热点代码一般是方法和循环体。循环体一般是指的是方法中的循环执行的代码。

    方法一般使用方法计数器计数,循环体一般使用回边计数器计数。

    jvm执行方法或者循环体的时候,会根据方法计数器和回边计数器的值的和和阈值进行大小的比较,如果超过则向编译器提交编译请求.

    方法计数器在在一定的时间,进行次数值的衰减,程序半衰期.方法计数器才有半衰期的概念,使用的不是方法调用的绝对次数,是一定的时间内方法调用的次数,

    而回表计数器没有半衰期的概念,则他是根据循环体执行的绝对次数进行判断.

    编译器分为两种,Client Complier 编译速度比较快,但是没办法加入全局的监控,信息的收集等,质量没有 Server Complier 编译器的产生的机器码质量高。

    Client Complier 即时C1编译器 Server Complier即时 C2编译器

    方法计数器触发的编译请求:

    回边计数器触发的编译请求,即方法内部的循环体

  • 相关阅读:
    makefile vpath变量
    博客园 文章和随笔区别
    Linux OpenGL 实践篇-6 光照
    HTC Vive 叠影器无法创建设备
    Mybatis注解
    MyBatis缓存
    MyBatis关联映射
    动态sql
    MyBatis智能标签
    Mybatis模糊查询及自动映射
  • 原文地址:https://www.cnblogs.com/histlyb/p/10528369.html
Copyright © 2011-2022 走看看