内存模型
线程栈:每个线程创建自己的栈区,大小可配置。如果太小递归调用会stackOverflow
堆内存:存储对象的区域,最大最小值均可设置
方法区:常量,类信息,静态变量等,大小可配置
程序计数器:不会有内存溢出,记录程序执行行数等
本地方法栈:会内存溢出。
image.pngGC-堆内存
Eden :新创建对象都在伊甸区
S0:新生代复制区域,默认是Eden的八分之一大小
S1:新生代复制区域,S0和S1两个区域完成不断复制的过程。
Old:老年代,新生代无法回收,大对象都会进入老年代。
GC-永久代
指方法区的内存回收。主要回收两部分内容:废弃常量和无用的类。频率远低于堆内存。
垃圾回收算法
- 可达性算法,GC Roots往下搜索。GC Roots可以是虚拟机栈(栈帧中的本地变量表)中引用的对象等。
- 复制算法。新生代的算法。两块区域,将存活的复制到新区域,老区域清空。
- 标记清除算法。第一轮标记废弃对象,第二轮删除他们。
- 标记整理算法。与标记清除类似,但是删除之后,存活的对象向前移动,避免空间碎片。
- 新生代都是复制算法,空间不够由老年代来担保。
- 老年代都是标记整理,多线程的。
网友评论