1、原理

  字节码无法直接交给硬件执行需要虚拟机翻译成机器码才能执行,“翻译”的策略有两种:解释执行和编译执行又称即使编译(JIT)。解释执行是没执行一句字节码的时候把字节码翻译成机器码并执行,优点是启动效率快,缺点是整体的执行速度较慢。编译执行预先把所有机器码编译成字节码并一起执行,其特点与解释执行相反,启动较慢执行较快。

  在jvm虚拟机中是两者混合出现,既有解释执行也有编译执行。首先是解释执行,一条条执行所有字节码,如果JVM发现某个方法被频繁的调用会把该方法用编译执行的策略编译好,下次执行的时候直接调用机器码,这种方法被称为热点方法,由此可见编译执行是以方法为单位。

  从业务的角度而言服务端和用户端对代码的执行速度和启动速度的要求是不一样的。比如移动端的应用程序,用户希望程序启动速度较快,服务端的程序,可能对程序的执行速度有更高的要求,为此从java7开始HotSpot采用了分层编译的方式,即引入了两种即使编译器:C1 C2。C1编译器称为client编译器,面向对启动性能有要求的用户端,编译时间段,优化策略简单;C2称为Serve驳岸一起面向对峰值性能有要求的服务器端,编译时间长,优化策略复杂。具体的在编译热点方法的时候先采用C1编译器,热点方法中的热点方法会被C2编译器再次编译。

2、JVM相关参数

  • -XX:CICompilerCount=n 指定JIT编译器用来编译方法的线程数量

  • -XX:CompileThreshold=n 指定一个方法的调用次数,以使HotSpot和JIT 编译器能编译它

  • -Xcomp 指定JVM在第一次使用时把所有的字节码编译成本地代码. (即CompileThreshold=1)

  • -Xbatch 在前台编译方法,直到编译完成方法才能执行

  • -Xint 仅仅使用解释模式,不激活JIT编译器 (即CompileThreshold=0)

最新文章

  1. win7下安装mysql后修改密码
  2. 几种I/O模型功能和性能对比
  3. 如何优化sql语句
  4. 说说C#的async和await(转)
  5. IDEA maven项目 包不能导入问题 全是红线
  6. apache-common pool的使用
  7. Linux下的Source命令及脚本的执行方式解析
  8. 【jsp网站计数功能】 application session
  9. css远距离链接
  10. python中的数字
  11. 使用Visual Studio 2017开发python,并在iis上部署Python Django
  12. ImmutableMap
  13. mysql列约束
  14. js作用域和内存
  15. Java-常用工具方法
  16. [20181130]control file sequential read.txt
  17. 基于C#net4.5websocket客户端与服务端
  18. jQuery - ajaxUpLoad.js
  19. Redis:五种数据类型的简单增删改查
  20. C#获取网页内容,并且处理正确编码

热门文章

  1. 面试官:"谈谈分库分表吧?"
  2. Python3 系列之 可变参数和关键字参数
  3. Ext数字格式化
  4. vue+webpack 安装常见插件
  5. css不受高度限制实现文本超出隐藏并以省略号结束
  6. iPhone照片格式heic图片怎么打开
  7. 如何制作微信动态表情包 GIF制作工具哪个好
  8. net core webApi返回值
  9. C# 过滤特殊字符,保留中文,字母,数字,和-
  10. Android Studio--gradle:download 过慢甚至超时timeout报错