1、运行时区域
虚拟机栈、本地方法栈、程序计数器、
1.8后:本地内存(直接内存+元空间(方法区))+堆
1.8前:本地内存(直接内存)+堆(方法区+其他)
2、堆是垃圾回收的主要区域
判断垃圾
引用计数法:(不被使用)
有一个引用,对象头+1
弊端:循环引用,a引用b,b引用a,无法回收
可达性算法:(常用)
以GC ROOT为起点的引用链上的对象不被回收
3、GC ROOT
4、对象可回收,一定会被回收?
5、垃圾回收算法
标记-清除法:标记需回收对象,再进行清除。
会造成不连续的内存碎片。
复制法:内存分为两部分,一半存放对象,另一半存放回收后的存活对象。
内存可用大小减半,还需移动存活对象,效率低。
标记-整理法:标记、整理存活对象紧紧排列,再进行清除。
每次回收都需要整理,效率低。
分代收集算法:整合上述三种算法。
堆分为新生代(1)和老年代(2)
新生代分为Eden区(8)、s0区(1)、s1区(1)
新生代:young GC(minor GC)复制算法
老年代:old GC(full GC)标记-整理法 回收新生代+老年代,触发stop the world
发生full GC的时间叫做safe point