`

Java 垃圾回收可达性分析算法

    博客分类:
  • Java
阅读更多

       在主流的商用程序语言(java、C#,甚至包含古老的Lisp)的主流实现中,都是称通过可达性分析(Reachability Analysis)来判断对象是否存活的。这个算法的基本思路就是通过一系列的称为“GC Roots”的对象作为起始点,从这些细节开始向下搜索,搜索所有走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链接相连(用图论的话来说,就是从GC Roots到这个对象不可达)时,则证明此对象是不可用的。如下图所示,对象Object 5、Object 6、Object 7虽然相互关联,但是他们到GC Roots是不可达的,所以它们将会被判定为是可回收的对象。

    


 

    在Java语言中,可作为GC Roots的对象包含下面几种:

  1. 虚拟机栈(栈帧中的本地变量表)中引用的对象。
  2. 方法区中静态属性引用的对象。
  3. 方法区中常量引用的对象。
  4. 本地方法栈中JNI(即一般说的Native方法)引用的对象。  
  • 大小: 5.9 KB
分享到:
评论

相关推荐

    java垃圾回收器代码举例

    - **可达性分析**:垃圾回收器通过一系列称为“根”(如局部变量、静态变量和JVM栈中的对象引用)的对象,来判断哪些对象是可达的,哪些是不可达的。不可达的对象被视为垃圾。 - **标记-清除算法**:这是最基础的...

    Java垃圾回收原理

    垃圾回收器通过可达性分析算法来判断对象是否还被引用。如果一个对象没有任何引用指向它,那么这个对象就可以被视为垃圾,并可被垃圾回收器回收。 #### 三、Java中的垃圾回收器 ##### 3.1 Serial Collector Serial...

    JAVA垃圾回收面试个人总结.doc

    常见的可达性分析算法,即根搜索算法,通过遍历GC Roots,标记所有可达的对象,然后清除未被标记的对象。 垃圾收集器需要解决三个核心问题:哪些对象需要回收、何时回收以及如何回收。不同的垃圾收集算法有不同的...

    java垃圾回收及内存泄漏.pptx

    - **可达性分析算法**:从一组根对象开始向下搜索,可达的对象被视为存活,不可达的对象被视为可回收。根对象通常包括静态变量、正在执行的方法参数、局部变量等。 4. **垃圾收集算法**: - **标记-清除算法**:...

    浅谈JAVA垃圾回收机制.pdf

    Java 中的垃圾回收机制主要通过两种算法来判断对象是否可以被回收,即引用计数算法和可达性分析算法。引用计数算法通过给对象中添加一个引用计数器来判断对象是否可以被回收,而可达性分析算法则是通过搜索 GC Roots...

    java垃圾回收(gc)机制详解.pdf

    确定一个对象是否“无用”,主要有两种算法:引用计数法和可达性分析法。 1. 引用计数法 引用计数法通过跟踪记录每个对象被引用的次数来判断对象是否可回收。当对象的引用计数器值为0时,意味着没有引用指向该对象...

    垃圾回收相关算法.pdf

    可达性分析算法是Java垃圾回收器的主要选择。它通过从一组称为GC Roots的对象开始,遍历整个引用链,判断对象是否可达。如果对象无法从GC Roots到达,那么它就是不可达的,可以被视为垃圾。GC Roots包括虚拟机栈中...

    理解Java垃圾回收

    - **对象可达性分析**:通过分析对象间的引用关系,确定哪些对象是可达的,哪些是不可达的。 - **内存池(Memory Pool)**:预先分配内存,减少动态分配的开销。 - **并行与并发GC**:多线程执行垃圾回收,提高...

    JAVA垃圾回收个人总结.docx

    对于"哪些对象需要回收",Java使用了可达性分析算法,也称为根搜索算法。它通过一系列被称为"GC Roots"的对象(如虚拟机栈、方法区的静态属性和常量、JNI引用等)作为起点,如果一个对象从这些根节点无法到达,那么...

    JAVA垃圾回收个人总结

    - **可达性分析算法(根搜索算法)**:这是一种常用的算法,它从一系列称为“GC Roots”的对象出发,通过跟踪引用链来确定哪些对象是可达的,未被引用的对象则被标记为垃圾。GC Roots包括: - 虚拟机栈中引用的对象...

    java垃圾回收知识全集

    - 可达性分析算法:Java使用这种方法,从GC Roots开始遍历对象图,无法到达的对象被视为可回收。 2. **GC Roots**: - 虚拟机栈中引用的对象 - 本地方法栈中引用的对象 - 方法区中的类静态属性引用的对象 - ...

    一文看懂Java垃圾回收.pdf

    **可达性分析算法**是Java主要采用的方法,它从一组称为GC Roots的对象开始遍历引用链。如果一个对象不能从GC Roots到达,那么它被认为是不可达的,因此可以被回收。GC Roots通常包括虚拟机栈中的本地变量表、方法区...

    Java垃圾回收机制

    - **对象的可达性分析**:GC通过判断对象是否可达来决定是否回收。如果一个对象不能从一组称为“根”(通常是方法区的类静态变量、Java栈中的局部变量、系统寄存器等)的对象链路中访问到,那么它被认为是不可达的...

    Java垃圾回收机制简述

    在Java中,垃圾回收机制使用可达性分析法来确定某个对象是“垃圾”。该方法的基本思想是通过一系列的“GC Roots”对象作为起点进行搜索,如果在“GC Roots”和一个对象之间没有可达路径,则称该对象是不可达的。被...

    关于javal垃圾回收机制的一些文档

    3. **可达性分析**:垃圾收集器通过检查对象的可达性来确定是否需要进行垃圾回收。常见的可达性标准包括根集(如栈上的本地变量、方法区的静态变量等)。 4. **垃圾收集算法**: - **标记-清除**:首先标记出所有...

    详细介绍Java垃圾回收机制.docx

    Java虚拟机(JVM)通过特定算法来识别并回收这些“垃圾”对象所占用的内存空间,以供后续使用。 #### 二、垃圾回收的基本原理 垃圾回收主要涉及两个核心问题: 1. **如何判断一个对象是否成为垃圾?** 2. **如何...

Global site tag (gtag.js) - Google Analytics