JVM基础之运行时数据区

Java虚拟机运行时数据区:
1. 程序计数器:用作当前线程所执行的字节码的行号指示器,所以说,每个线程都会有一个独立的程序计数器,该计数器为线程所私有;
2. Java虚拟机栈:同样属于线程私有,虚拟机栈描述的是Java方法执行的内存模型,每个方法在执行时都会创建一个栈帧,用于存储局部表量表、操作数栈、动态链接、返回地址等信息,每个方法从调用到执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。只有位于栈顶的栈帧才是有效的,称为当前栈帧。
局部变量表(Local Variable Table):通常在编译程序代码时就已经确定表的最大容量。表以变量槽(Variable Slot)为最小单位。虚拟机使用局部变量表完成参数值到参数变量列表的传递,特殊的地方在于,当执行的是实例方法是,局部变量表第0位索引的Slot默认用于传递方法所属对象实例的引用,即平常所使用的this。
局部变量表中的Slot是可以重用的。
局部变量表中的变量在类加载的过程中不存在“准备”阶段,也就是说,局部变量表中的变量不会被系统赋予初始值,从而局部变量在使用之前必须对其进行初始化,如果只是单纯的定义没有手动进行初始化赋值,那么就不能对该变量进行访问使用。如果访问了,程序将无法编译通过。
操作数栈:
两个栈帧的操作数栈可以部分重叠,从而减少参数的传递。
动态链接:
包含指向运行是常量池中该栈帧所属方法的引用。
返回地址:
顾名思义,就是从方法中返回,一般是调用函数指令的后面一条指令的地址。
3. 本地方法栈:与虚拟机栈相似的作用,虚拟机栈执行的是Java方法服务,本地方法栈执行的是Native方法服务;所谓的Native方法就是Java调用非Java代码的接口,比如Native Method的实现由C实现。(A native method is a java method whose implementation is provided by non-java code )
4. Java 堆:几乎所有的对象实例以及数组都在堆上分配内存,也是垃圾收集管理器的主要区域。Java堆可以细分:新生代以及老年代,还可以进一步细分,这里就不多讲述。
5. 方法区:各个线程共享的内存区域,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。运行时常量池也是方法区的一部分,
运行时常量池:存放各种字面量和符号引用。

参考 周志明书《深入理解JVM虚拟机》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值