Java存储结构-JVM规范学习笔记

Java 存储结构-JVM规范学习笔记

Java线程

  1. 每个Java虚拟机线程具有一个私有的,与线程同时创建的Java栈,同时每个线程还拥有一个属于自己的PC寄存器。
  2. Java栈中存储Java虚拟机框架,Java虚拟机框架可以是堆分配的。
  3. Java栈的存储器不需要连续的,Java虚拟机规范允许Java栈大小是固定的或动态变化的。
  4. 以下情况将抛出异常:如果线程中计算需要比所允许大的Java栈,将抛出StackOverflowError;如果栈是可动态分配的,当视图扩展Java栈但没有足够的存储器来实现时,将抛出OutOfMemoryError。
  5. 如果正在执行的方法不是native,那么PC寄存器包含当前正在被执行的的Java虚拟机指令的地址;如果当前执行的方法是native,则PC寄存器的值没有定义。
  6. PC寄存器占一个字宽。

Java虚拟机框架

  1. 每次Java方法被调用时创建一个新Java虚拟机框架框架。当框架的方法结束时,框架被撤销。
  2. 每个框架包含局部变量集、操作数栈和动态链接等。这些结构的存储器空间可以同时分配,因为局部变量集合操作数栈在编译期已知,且框架数据结构的大小只依赖Java虚拟机的实现。
  3. 在一个给定线程的任何点,只有一个框架,即正在执行的方法的框架是活跃的,也称为当前框架,其方法也称为当前方法。

Java堆

  1. Java虚拟机所有线程共享同一个堆,从堆中分配所有类的实例和数组。
  2. Java堆在虚拟机启动的时候创建,对象的堆存储器空间由垃圾回收器进行回收。
  3. 堆的大小可以是固定的,也可以根据计算的需求进行扩展。
  4. 当计算要求比存储器可获得的更多的存储器空间时,将抛出OutOfMemoryError。
  5. Java堆存储器并不要求连续。

方法区

  1. 所有线程共享同一个方法区,方法区在逻辑上是Java堆的一部分,不需要连续。
  2. 方法区存储常数池、域和方法数据、以及方法和构造函数。
  3. 作为堆的一部分,方法区可以实现为不需要进行垃圾回收。
  4. 如果不能得到方法区中的存储器来满足分配需求,则抛出OutOfMemoryError。
  5. 方法区可以是固定大小,也可以根据需求进行扩展。

常数池

  1. 常数池是每个类或接口的Java class文件中的constant_pool的运行期表示。
  2. 每个常数池从方法区分配。

自身方法栈

  1. Java虚拟机实现的传统的栈,以支持native方法。


 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值