JAVA虚拟机规范读书笔记--栈,堆,方法区(内存分配)

来源:互联网 发布:网络用语py什么意思 编辑:程序博客网 时间:2024/06/05 10:48

JAVA虚拟机运行时内存分配

  1. PC寄存器
  2. JAVA栈
  3. JAVA堆
  4. 方法区
  5. 运行常量池
  6. 本地方法栈

PC寄存器

每一条java虚拟机线程都有自己的pc寄存器,任意时刻java虚拟机只会执行一个方法的代码,若该方法不是native的pc寄存器保存正在执行的字节码指令地址,如果是native的pc寄存器的值为undefined(未定义)

JAVA 栈

每一条java虚拟机线程都有自己私有的java虚拟机栈,这个栈与虚拟机线程被同时进行创建,用于存储局部变量和一些没有计算好的结果,java虚拟机栈不需要保证内存是连续的。
请求分配内存时超出虚拟机允许的最大容量StackOverflowError
栈在尝试扩展空间没有申请到足够的内存OutOfMemoryError

JAVA 堆

堆提供一个可以供个个线程共享的运行时内存区域(对象,数组分配内存),java虚拟机堆在虚拟机启动时就被创建了,他存储自动内存管理系统(垃圾回收器)所管理的各种对象。
堆内存超过内存管理最大容量OutOfMerryError

方法区

方法区提供一个可以供个个线程共享的运行时内存区域,方法区在虚拟机启动时创建,方法区是堆的逻辑组成部分,但简单的虚拟机实现在这个区域可以不实现垃圾收集和回收。

运行常量池

运行常量池在方法区中分配。他是每一个类或接口在运行时的表达形式

本地方法栈

java虚拟机实现过程中可能用到传统的C栈(C Stack)来支持native方法(用其他语言编写的方法),这个栈就是本地方法栈