java 什么是类的 GC 根?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/27186799/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-02 11:22:01  来源:igfitidea点击:

What are GC roots for classes?

javagarbage-collectionjvm

提问by Kao

In Java, there are special objects called Garbage Collection Roots(GC roots). They serve as a root objects for Garbage Collection marking mechanism (see picture).

在 Java 中,有称为垃圾回收根(GC 根)的特殊对象。它们充当垃圾收集标记机制的根对象(见图)。

enter image description here

在此处输入图片说明

This articledescribes four types of GC roots:

本文介绍了四种类型的 GC 根:

  • local variables
  • active threads
  • static variables
  • JNI references
  • 局部变量
  • 活动线程
  • 静态变量
  • JNI 引用

It is also mentioned, that:

还提到:

Classes themselves can be garbage-collected.

类本身可以被垃圾收集。

GC roots aren't collected thus classes themselves are not GC roots.

不会收集 GC 根,因此类本身不是 GC 根。

So what are GC roots for the classes?

那么类的 GC 根是什么?

采纳答案by Jon Skeet

So what are GC roots for the classes?

那么类的 GC 根是什么?

Classloaders, effectively - via other GC roots.

类加载器,有效 - 通过其他 GC 根。

If there is nothing which can reach a classloader - which means nothing can reach any instances of classes created by that classloader - then both the classloader and the classes it created are eligible for garbage collection.

如果没有任何东西可以到达类加载器——这意味着没有东西可以到达由该类加载器创建的类的任何实例——那么类加载器和它创建的类都有资格进行垃圾收集。

回答by Premraj

A garbage collection root is an object that is accessible from outside the heap.

垃圾回收根是一个可以从堆外访问的对象。

Memory Analyzer categorizes garbage collection roots according to the following list:

内存分析器根据以下列表对垃圾回收根进行分类:

  1. Class loaded by system ClassLoader
    • static field in JDK classes(java.* etc)
  2. Live thread
    • stack -local vars, method params
    • java.lang.Threadinstance
  3. Object held as synchronization monitor
  4. JNI references
  5. JVM specials...
  1. 由系统 ClassLoader 加载的类
    • JDK 类中的静态字段(java.* 等)
  2. 实时线程
    • 堆栈 - 本地变量,方法参数
    • java.lang.Thread实例
  3. 作为同步监视器持有的对象
  4. JNI 引用
  5. JVM 特价...

Source 1Source 2

来源 1来源 2