深入理解JIT

本文深入探讨了Java即时编译器JIT的工作原理,包括HotSpot编译的细节,如寄存器和主存的优化策略。还介绍了JIT的调优技巧,如在客户模式或服务器模式下选择合适的编译器,以及如何优化代码缓存、编译阈值,并提供了检查编译过程的手段。最后,讨论了编译线程在高级编译器调优中的作用。
摘要由CSDN通过智能技术生成

1、简介

即时编译器,使用即时编译器可加速Java程序执行速度。Java代码执行时候是边解释边执行,执行速度比可执行二进制字节码慢。JIT会将翻译后的机器码保存起来以备下次使用.
JIT默认是启用的,JVM读入.class文件解释后发给JIT编译器,JIT编译器将字节码翻译成本机机器代码.

JIT工作原理:
在这里插入图片描述

2、HotSpot编译

JVM执行代码不会立即编译代码,两个原因:

  1. 只执行一次编译浪费时间,一段代码频繁调用的方法,或是一个循坏,编译器具有权衡能力首先执行解释后代码,将频率高的字节码直接编译为机器指令提升性能.
  2. 最优化,JVM执行某个方法或遍历循环次数越多会更加了解代码结构JVM编译时候会做出相应优化.

寄存器和主存

很重要的优化策略是编译器可以决定何时从主存取值何时向寄存器存值.

编译器会加载一个寄存器给sum并赋予初始值利用寄存器值来执行循环,将最终结果从寄存器返回给主存.线程同步可解决一个线程无法得知另一个线程所用寄存器中变量值的问题.

优化只会在代码运行和观察一段时间后发生,这就是为何JIT不会理解编译代码而是选择等待然后再去编译某些代码片段的第二个原因。

3、初级调优:客户模式或服务器模式

运行有两种模式并在运行时候决定使用哪种达到最优性能.-server模式启动较慢但运行后性能会提升原因是虚拟机运行在-client模式时使用的是C1的轻量级编译器而-server启动时采用相对重量级C2编译器,C2比C1编译的更加彻底所以服务起来后性能更高.

4、中级编译器调优

大多数情况下,优化编译器其实只是选择合适的 JVM 以及为目标主机选择合适的编译器(-cient,-server 或是-xx:+TieredCompilation)。多层编译经常是长时运行应用程序的最佳选择,短暂应用程序则选择毫秒级性能的 client 编译器。

4.1、优化代码缓存

当 JVM 编译代码时,它会将汇编指令集保存在代码缓存。代码缓存具有固定的大小,并且一旦它被填满,JV

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值