类加载
类加载器的定义
类加载器的类别
类装载的执行过程
类的装载过程:
加载:
验证:
准备:
这里设置初始值并不是传统意义的设置初始值(那个过程在初始化阶段)。
解析:
初始化:
使用:
类的回收(被垃圾器回收)
回收时机
垃圾定位——可达性分析法
可作为GC root的对象:
垃圾回收算法
标记清除算法
标记整理算法
先将存活对象移动到一起,然后清楚边界之外的垃圾。
优点:解决了内存碎片化问题。缺点:效率低。
复制算法
开辟了一块新的内存空间,将存活对象按序复制过去,然后直接清空原来的内存空间。
优点:克服内存碎片化问题+效率较高。
缺点:需要两块内存空间,内存使用率低。
分代回收
回收过程
java8开始,堆空间被分为了新生代与老年代。
新创建的对象都要被存在Eden区:
GC种类
小结
垃圾回收器的类型
串行垃圾回收器
创建一个垃圾回收线程串行回收垃圾。
并行垃圾回收器(JDK8默认)
创建多个垃圾回收线程进行垃圾回收。
CMS(并发垃圾回收器)
G1垃圾回收器(JDK9之后默认,使用复制算法)
新生代的回收
并发标记阶段
混合收集阶段
其不仅会回收部分老年区,还回去回收其他的区,只要其回收价值够高。(左图为回收前,右图为回收后,将回收的区域集体复制到某些区域后,清楚待收集的地区。)
结束之后,开启新的新生代回收、并发标记、混合收集的循环阶段。
回收失败
如果上述回收方法赶不上对象新建方法,则会采用FULL GC(回收所有区域的垃圾)回收