美文网首页jvm
GC root有哪些

GC root有哪些

作者: Depro | 来源:发表于2021-08-06 08:17 被阅读0次

    有哪些?

    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. 标记-整理: 找到有用的对象全部移到一边,剩下无用的对象标记为可清除了

    相关文章

      网友评论

        本文标题:GC root有哪些

        本文链接:https://www.haomeiwen.com/subject/clkbvltx.html