jvm判断对象是否已经死掉的方法有两种,1种是可达性算法,1种是计数器引用算法,可达性算法就是将对象全部连接到以GC root的数据链上,并以GC root为根节点,进行遍历寻找,如果对象遍历不到,则证明对象已经死亡。
计数器引用算法则是通过每次调用对象的时候,对象引用计数器都会+1,如果引用计数器为0,则证明对象已经死掉。
jvm的堆工作区分为新生代区和老生代区,新线程区又分为edan和survival区,survival区又分为from和to区,新线程区三个分区的比例是8:1:1
垃圾收集算法分为三种
第一种是标记清除算法,第二种是标记复制算法,第三种是标记整理算法
标记清除算法就是
标记复制算法就是
当新线程区满了以后就会触发局部内存回收机制,将edan和from的内容复制到to区,并清空新线程区中的其他部分的内容。
堆工作区满了以后则会除法全部内存回收机制,将edan中存活的内容复制到survival,并清空edan区全部内容。