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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    关于unittest框架的传参问题
    爬虫的框架:Scarpy
    Robot Frameworke在python3上搭建环境以及快捷方式的创建
    安装第三方模块报错:read time out
    操作正则表达式遇到的问题
    gil锁 线程队列 线程池
    并发编程
    网络编程传输文件
    粘包现象
    UDP协议下的socket
  • 原文地址:https://www.cnblogs.com/histlyb/p/10528369.html
Copyright © 2011-2022 走看看