有哪些?
- native,本地方法栈引用的对象(在本地方法栈)
- final,常量对象(在方法区)
- static,静态变量引用的对象(在方法区)
- synchronzied引用的对象(在堆里)
- jvm虚拟机栈引用的对象(在jvm虚拟机栈中)
- Thread,活动的线程
- Class对象,由BootstrapClassLoader加载的对象是不能被回收的
为什么要有GC root?
- 为了回收无有的对象,释放内存,需要把无有对象找到;找无有的不好找,反过来找有用的对象就比较好找;
- gc root就是用来标记有引用关系的对象,这些在gc root引用关系链上的强引用对象都是不能回收
- 一般对象都放在堆里的,所以垃圾回收的重点是放在了堆里。所以堆之外的栈,方法区就是gc root对象所在的地方
回收算法有哪几种?
- 标记-清除 : 找到了有用的,把剩下无用的标记为可清除了
- 标记-复制: 找到有用的,把有用的对象复制到一块新内存,剩下的标记为可清除
- 标记-整理: 找到有用的对象全部移到一边,剩下无用的对象标记为可清除了
网友评论