运行时数据区

java 虚拟机定义了若干种程序运行期间会使用到的运行时数据区。
其中一些随着虚拟机启动而创建,随着虚拟机退出而销毁。
另一些是跟线程一一对应,随着线程开始和结束而创建和销毁。

1. PC寄存器:

与线程相关,每一个虚拟机线程都有自己的PC寄存器

2. java栈

java虚拟机栈,与线程相关,每个线程都有自己私有的虚拟机栈,与线程同时创建。用于存储栈帧,存储局部变量,一些尚未算好的结果,用于方法的调用和返回。栈帧本身可以在堆中分配,虚拟机栈使用的内存不要求是连续的。
 虚拟机栈可能发生以下异常情况:
 (1):   stackOverflowError, 当线程请求分配的容量超过java虚拟机栈允许的最大容量。
 (2): OutOfMemoryError,  如果java虚拟机栈可以动态扩展,且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的java虚拟机栈。

3. java堆

java堆,是可供各个线程共享的运行时内存区域,也是供所有类实例和数组对象分配内存的区域。垃圾回收器就处理这部分。

在虚拟机启动的时候创建。
同样java堆的内存不需要保证是连续的,容量可以是固定的,也可以是动态扩展的。

java堆可能发生OutOfMemoryError 异常: 如果实际所需的堆超过了GC所能提供的最大容量。

4. 方法区
“`
各个线程共享的运行时内存区域。存储每一个类的结构信息。比如运行时常量池,字段和方法数据,构造函数和普通方法的字节码内容。

在虚拟机启动时创建。是堆的逻辑组成部分,但是简单的虚拟机可以选择在这个区域不实现垃圾回收。
同样的,如果方法区内存不能满足内存分配要求,会抛出OutOfMemoryError 异常
“`
5. 运行时常量池

     是class文件中,每一个类或接口的常量池表的运行时表示形式。  类似符号表。  运行时常量池都在java虚拟机的方法区中分配。 在加载类和接口到虚拟机后,就创建对应的运行时常量池。
     同样如果构造运行时常量池的内存空间吃哦啊过了方法区所能提供的最大值时,会抛出 OutOfMemoryError 异常     

6. 本地方法栈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值