一 : Java虚拟机运行时内存模型
如上图:
一:模型种类:
java虚拟机内存模型主要分为5块:
1. 方法区 :主要存储已经加载过的类的相关信息 , 常量池 , 静态变量 。(所有线程共享)
2. 虚拟机堆: 主要存储创建出来的对象和数组对象 。(所有线程共享)
3. 虚拟机栈: 基本类型数据(int,short ,.......),对象的引用....(属于单个线程)
4. 程序计数器:java虚拟机的多线程是通过线程轮流切换处理实现的,任何一个时刻,一个处理器都只会执行某一条线程中的指令。因此,为了线程切换后能恢复到正确的执行位置,每个线程都有一个独立的程序计数器,主要用来记录该线程代码已执行到哪一行。(属于单个线程)
5. 本地方法栈: 在Hotspot虚拟机中,将该部分和虚拟机栈归类为同一块,虚拟机栈主要是记录java代码执行,但是本地方法栈是记录native方法执行情况。(属于单个线程)
二:内存回收模型:
GC root种类:
1. 虚拟机栈所引用的对象。
2. 静态变量引用的对象。
3. 常量引用的对象。
4. 本地方法引用的对象。
分代回收算法:
1. 新生代 (eden , From survivor ,To survivor)。
2. 老年代。
3. 永生代。
新生代和老年代是对于堆内存的描述 , 永生代是对于方法区的描述 。
参考: 深入理解java虚拟机 JVM高级特性与最佳实践