java虚拟机内存存储结构

1.Program Counter Register (程序计数器):用来标记当前线程所执行的子解码的行号指示器,每个线程都有自己的程序计数器

2.VIrtual Machine Stack(虚拟机栈):每个方法被执行的时候java虚拟机都会同步创建一个桟帧,用于存储局部变量表,操作数桟,动态连接,方法出口等信息。每个方法从被调用到执行完毕的过程,就对应着一个桟帧在虚拟机桟从入桟到出桟的过程。

注解:

平时说的桟大多数指的是虚拟机桟中局部变量表的部分。

局部变量表中存放了编译期可知的各种java虚拟机基本数据类型,对象引用和returnAddress类型(指向了一条字节码指令的地址)

虚拟机中这个区域有两类异常情况:线程请求的桟深度大于虚拟机所允许的深度则抛出StackOerflowError异常;如果桟使用内存超出则抛出OutOfMemoryError异常。

3.Heap(堆) 此区域的唯一目的就是存放java对象,垃圾处理器管理这部分区域,所以也称为GC堆。

注解:

年轻代:堆中的年轻代分为eden,From Survivor ,To Survivor。对象总是在eden区创建。每次gc时会将eden区幸存的对象和from Suvivor中的对象存储到ToSurvivor区中,再将eden和fromSurivor区清除,再将fromSuvivor区和toSurvivor区逻辑调换。

4.Method Area(方法区,非堆, Non-Heap): 存储已被虚拟机家在的类型信息,常量,静态变量,即时编译器编译后的代码缓存等数据。       

类型信息存储在meta-space中       

你可能感兴趣的:(java虚拟机内存存储结构)