GC如何判断对象死活
1 引用计数法:
给对象添加一个引用计数器,每过一个引用计数器值就+1,少一个引用就-1。当它的引用变为0时,该对象就不能再被使用。引起的问题:不能解决循环引用
2 可达性分析法
从gc root 触发,不可达将被通知gc去回收
gc root类型
1 虚拟机栈引用的对象
2 方法区静态属性引用的对象
3 方法区常量引用的对象
4JNI引用的对象
垃圾回收算法
标记清除算法
1 把所有活动对象标记出来
2 将没有被标记的对象同一处理
问题:
1 造成内存碎片
2 扫描整个内存空间效率低
复制算法
1 将内存空间分成大小相等的两份,每次使用一份
2 gc时,将正使用的内存块中的存活对象复制到未使用的那一块
3 清除正使用的内存块中的对象
4 交换两块内存的角色
问题:一半空间浪费