方法区 | 永久代,共享。类信息,常量,static变量,JIT编译后的代码。 运行时常量池:字面量,符号引用。 |
堆
|
所有对象(新生代,老年代)
|
虚拟机栈
|
线程私有。表示方法执行的内存模型。【局部变量表】
|
本地方法栈
|
|
程序计数器 |
字节码行号。线程私有。
|
【Object obj = new Object();】
——Object obj反映到“Java栈”的局部变量表中,作为一个reference类型数据出现。
——new Object()这部分的语义反映到Java堆中。形成一块存储了Object类型所有实例数据值的结构化内存。
——另外在Java堆中还必须包含能查找到此对象类型数据(如对象类型、父类、实现的接口、方法等)的地址信息,这些类型数据存储在方法区中。
【对象的创建】
常量池的符号引用。类加载。分配内存。线程安全TLAB。初始化。
【对象内存布局】
对象头:运行时数据 + 类元数据指针。
实例数据:字段。
对齐填充。
【对象的访问定位】
栈上的reference。
访问方式:使用句柄,直接指针。
http://blog.csdn.net/wang8118/article/details/45269867
Thread私有:程序计数器,虚拟机栈(栈帧:返回地址,局部变量表,操作数栈,动态链接:指向运行时常量池中该帧所属方法的引用,运行期间转化为直接引用),本地方法栈
方法区
堆
当前方法所在的类的运行时常量池引用
字节码中的方法调用指令就是以常量池中指向方法的符号引用作为参数。
【运行时栈帧结构】:方法调用,字节码执行
线程隔离,当前栈帧