JVM内存结构存储

1.程序计数器 PC Register

每个线程都有一个程序计算器,就是一个指针,指向方法区中的方法字节码(下一个将要执行的指令代码),由执行引擎读取下一条指令,是一个非常小的内存空间,几乎可以忽略不记。

2.本地方法栈 Native Method Stack

本地方法栈与虚拟机栈基本类似,区别在于虚拟机栈为虚拟机执行的java方法服务,而本地方法栈则是为Native方法服务

3.方法区 Method Area

用于存储虚拟机加载的:静态变量+常量+类信息+运行时常量池 (类信息:类的版本、字段、方法、接口、构造函数等描述信息 )

默认最小值为16MB,最大值为64MB,可以通过-XX:PermSize 和
-XX:MaxPermSize 参数限制方法区的大小

4.栈 JVM Stack

  • 编译器可知的各种基本数据类型(boolean、byte、char、short、int、float、long、double)、对象引用(引用指针,并非对象本身)
  • 栈是java 方法执行的内存模型:
    每个方法被执行的时候 都会创建一个“栈帧”用于存储局部变量表(包括参数)、操作栈、方法出口等信息。
    每个方法被调用到执行完的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。

5.堆 Java Heap

  • 所有的对象实例以及数组都要在堆上分配,此内存区域的唯一目的就是存放对象实例
  • 堆是Java 虚拟机所管理的内存中最大的一块。Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建
  • 结构:新生代(Eden区+2个Survivor区) 老年代 永久代(HotSpot有)

相关文章: