jvm

GC root有哪些

2021-08-06  本文已影响0人  Depro

有哪些?

  1. native,本地方法栈引用的对象(在本地方法栈)
  2. final,常量对象(在方法区)
  3. static,静态变量引用的对象(在方法区)
  4. synchronzied引用的对象(在堆里)
  5. jvm虚拟机栈引用的对象(在jvm虚拟机栈中)
  6. Thread,活动的线程
  7. Class对象,由BootstrapClassLoader加载的对象是不能被回收的

为什么要有GC root?

  1. 为了回收无有的对象,释放内存,需要把无有对象找到;找无有的不好找,反过来找有用的对象就比较好找;
  2. gc root就是用来标记有引用关系的对象,这些在gc root引用关系链上的强引用对象都是不能回收
  3. 一般对象都放在堆里的,所以垃圾回收的重点是放在了堆里。所以堆之外的栈,方法区就是gc root对象所在的地方

回收算法有哪几种?

  1. 标记-清除 : 找到了有用的,把剩下无用的标记为可清除了
  2. 标记-复制: 找到有用的,把有用的对象复制到一块新内存,剩下的标记为可清除
  3. 标记-整理: 找到有用的对象全部移到一边,剩下无用的对象标记为可清除了
上一篇下一篇

猜你喜欢

热点阅读