怎么判断哪些对象需要被回收?
根可达算法,根不可达的对象没有被任何方法引用那么就说无用的对象可被回收
垃圾回收算法有哪些?
- 标记清除会清除掉垃圾对象,但会导致不连续的内存空间。
- 标记压缩不但清除掉垃圾对象还会把有用对象压缩到一块,空出连续内存空间,所以优于标记清除。
- 拷贝是清除之后将有用对象拷贝到新的区域,比如JVM
youngGC会把新生代有用对象全部拷贝到一个空的survive区然后把eden区和另一个survivor区的对象全部清除,survivor0和survivor1两个区是轮换的总有一个区是空的,每发生一次youngGC都会把一个区的幸存对象全部拷贝到另一个survive区,也是为了解决内存碎片化问题。
垃圾回收器有哪些?
Serial串行垃圾回收器,单线程进行垃圾回收,GC时会STW,业务线程全部停止等GC完了才继续,小内存还可以,大内存垃圾回收耗时会很长
CMS concurrent mark sweep并发标记扫描,为了解决STW而诞生,可以一边回收一边执行业务线程
G1
三色标记算法
自己和自己引用的对象都找到的对象被标记为黑色
自己找到但是自己引用的对象没找到的对象被标记为灰色
自己都没有被找到的对象被标记为白色