Open liangcmwn opened 5 years ago
Fork/Join
MissionControl
方法区(Method Area) ----------- 虚拟机栈(VM Stack) ------------- 本地方法栈(Native Method Stack) 堆(Heap) ---------- 程序计数器 (Program Counter Register)
执行引擎 -> 本地库接口 -> 本地方法库
程序计数器(Program Counter Register) 当前线程所执行的字节的行号指示器。 每条线程都有一个独立的程序计数器,各线程之间计数器互不影响,独立存储。
Java虚拟机栈 描述Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧(Stack Frame)用于存储局部变量表,操作数栈,动态链接,方法出口灯信息。 每一个方法从调用直到执行完成的过程,就对应着一个栈帧在虚拟器栈中入栈到出栈的过程。
局部变量表存放了编译期可知的各种基本数据类型(boolean,byte,char,short,int,float,long,double),对象引用(reference类型可能是一个指向对象地址的引用指针,也可能是指向一个代表对象的句柄或者其他与此对象相关的位置),和returnAddress类型(指向了一个字节码指令的地址)。
64位长度的long和double类型的数据会占用2个局部变量空间(Slot),其他的数据类型只占1个。 局部变量表所需的内存空间大小在编译期完成分配,运行期不会改变。
本地方法栈 为虚拟器使用到的Native方法服务。有的虚拟机将本地方法栈和虚拟机栈合二为一。
HotSpot VM
的热点代码探测能力可以通过执行计数器找出最具有编译价值的代码,然后通知JIT编译器以方法为单位进行编译。如果一个方法被频繁调用,或方法中有效循环次数很多,将会分别触发标准编译和OSR(栈上替换)编译动作。通过编译器与解释器恰当地协同工作,可以在最优化的响应时间与最佳执行性能中取得平衡,而且无须等待本地代码输出才能执行程序,即时编译的时间压力也相对减少,这样有助于引入更多的代码优化技术,输出质量更高的代码。