MENU

逃逸分析

April 11, 2020 • Read: 466 • Java

逃逸分析

JVM运行模式有三种:

  • 解释模式(Interpreted Mode) :只使用解释器(-Xint 强制JVM使用解释模式),执行一行JVM字节码就编译一行为机器码;
  • 编译模式(Compiled Mode):只使用编译模式(-Xcomp JVM使用编译模式),先将所有JVM字节码一次编译为机器码,然后一次执行所有机器码;
  • 混合模式(Mixed Mode):依然使用解释模式执行代码,但是对于一些"热点"代码采用编译模式执行,JVM一般采用混合模式执行代码;

解释模式启动快,对于只执行部分代码,并且大多数代码只执行一次的情况比较合适;

编译模式启动慢,但是执行速度快,比较占用内存,因为机器码的数量至少是JVM字节码的十倍以上,适合代码被反复执行的场景;

混合模式是JVM默认采用的执行代码方式,开始执行的还是解释模式,但是对于少部分“热点”代码会采用编译模式执行,这些代码对应的机器码会被缓存起来,下次执行无需编译,即JIT(Just In Time Compiler)即时编译技术。

在即时编译过程中JVM可能会对我们的代码做一些优化,引出我们要研究的逃逸分析等

JVM 运行时数据去(内存模型)

栈区:线程私有,生命周期与线程同步。Java方法执行的内存模型:每个方法在执行的都会创建一个栈帧(Stack Frame)用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法从调用直至执行完成的过程,就对应一个栈帧在虚拟机Stack区中入栈到出栈的过程。

栈帧:用于支持虚拟机运行方法调用和方法执行的数据结构。

程序计数器:线程私有,存放JVM指令码行号。

线程运行过程中产生的局部变量;

类加载将字节码编译为对应的JVM指令码,加载到方法区常量池