首页 > 编程语言 > 详细

javac虚拟机结构图

时间:2015-03-24 23:11:17      阅读:358      评论:0      收藏:0      [点我收藏+]

技术分享

java虚拟机:正确读取Class文件中每一条字节码指令,并且能正确执行这些指令所蕴含的操作。

运行时数据区:
PC(Program Counter)寄存器:多条线程同时执行,每一条线程有自己的PC寄存器。任意时刻,一条线程只会执行一个方法的代码。PC寄存器保存returnAddress类型或一个与平台相关的本地指针的值。
java虚拟机栈stack:每个虚拟机线程有自己私有的虚拟机栈,与线程同时创建,用于存储栈帧:局部变量与一些过程结果。
java堆heap:提供各线程共享的运行时内存区域,供所有类实例和数组对象分配内存的区域。java的堆在虚拟机启动时被创建,存储被GC(垃圾搜集器)管理的各种对象。
方法区:提供各个线程共享的运行时内存区域。存储每个类的结构信息:运行时常量池,字段,方法数据,构造函数,普通方法的字节码内容,类、实例 、接口初始化时用到的特殊方法。方法区在虚拟机启动时被创建,是堆的逻辑组成部分。
运行时常量池:每一个类或接口的常量池的运行时表示形式 ,编译期可知的数值字面量,运行期解析后知道的方法或字段引用。运行时常量池分配在JAVA虚拟机的方法区,在类和接口被加载到虚拟机后,对应的运行时常量池被创建出来。
本地方法栈:传统的栈来支持native方法的执行或使用其他语言来实现指令解释器。

栈帧:存储数据和部分过程结构的数据结构,处理动态链接,方法返回值和异常分派。帧栈随着方法的调用而创建,随着方法的结束而销毁。栈帧的存储空间分配在java虚拟机栈中,每个栈都有自己的局部变量表,操作数栈和指向当前方法所属的类的运行时常量池额的引用。局部变量表和操作数栈的容量在编译期确定,通过方法的code属性保存及提供给栈帧使用,栈帧的容量大小取决于java虚拟机的实现和方法调用时可分配的内存。
在一条线程中,只有目前正在执行的方法的栈帧是活动的,当前帧,当前方法,当前类。对局部变量表和操作数栈的操作通常是对当前数栈的对局部变量表和操作数栈的操作。
当前方法调用其他方法,新的栈帧创建,方法返回时,当前栈帧返回到前一栈帧。
局部变量表:


javac虚拟机结构图

原文:http://blog.csdn.net/wojiong132/article/details/44596741

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!