Java 内存模型

Java 执行流程

  1. java源文件经过java编译器,编译过后生成.class的字节码文件
  2. 然后jvm的类加载器加载.class文件,
  3. 加载完成后,jvm的执行引擎执行class中的指令
  4. 将执行过程中所用的数据(类信息,对象等等)存储在运行时数据区(runtime data area)中,运行时数据区,就是jvm内存了。

Java 内存模型

程序计数器:类似PC寄存器的概念,存储当前线程执行字节码指令的行数。

虚拟机栈:一个线程的每个方法在执行的同时,都会创建一个栈帧(Statck Frame)。java栈中存放的是一个个的帧栈,每个帧栈包括:局部变量表,操作数栈,运行时常量池的引用,方法返回地址,附加信息。

本地方法栈:和虚拟机栈类型,只不过本地方法栈为native方法服务,虚拟机栈为java方法服务,HotSpot虚拟机直接将本地方法栈和虚拟机栈合并在一起。

堆区:存储对象本身和数组,占用内存最大的一块区域。java堆,是垃圾收集器管理的主要区域,也成为GC堆。目前,基本上所有的jvm都采用了分代收集算法,将java堆,分为年轻代,年老代,持久代。

方法区:用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据,和java堆一样,是一块线程共享的区域。