1.概念

GC管理的主要区域是Java堆,一般情况下只针对堆进行垃圾回收。方法区、栈和本地方法区不被GC所管理,因而选择这些区域内的对象作为GC roots,被GC roots引用的对象不被GC回收。

根搜索算法是JVM用来的判断对象是否存活的算法,此算法基本思路为通过一系列的“GC Roots”对象作为起始点,从这些节点往下搜索,当一个对象和GC Roots不可达时,则该对象是无用的,可被回收的。如下图所示:object5、object6、object7虽然互相有关联,但是他们到GC Roots是不可达的,因此他们都可以被回收。

2.详细:

GC Root

常说的GC(Garbage Collector) roots,特指的是垃圾收集器(Garbage Collector)的对象,GC会收集那些不是GC roots且没有被GC roots引用的对象。

一个对象可以属于多个root,GC root有几下种:

Class - 由系统类加载器(system class loader)加载的对象,这些类是不能够被回收的,他们可以以静态字段的方式保存持有其它对象。我们需要注意的一点就是,通过用户自定义的类加载器加载的类,除非相应的java.lang.Class实例以其它的某种(或多种)方式成为roots,否则它们并不是roots。

Thread - 活着的线程

Stack Local - Java方法的local变量或参数

JNI Local - JNI方法的local变量或参数

JNI Global - 全局JNI引用

Monitor Used - 用于同步的监控对象

Held by JVM - 用于JVM特殊目的由GC保留的对象,但实际上这个与JVM的实现是有关的。可能已知的一些类型是:系统类加载器、一些JVM知道的重要的异常类、一些用于处理异常的预分配对象以及一些自定义的类加载器等。然而,JVM并没有为这些对象提供其它的信息,因此需要去确定哪些是属于"JVM持有"的了。

3.在java中,可作为GC Roots的对象有:

1.虚拟机栈(栈帧中的本地变量表)中引用的对象;

2.方法区中的类静态属性引用的对象;

3.方法区中常量引用的对象;

4.本地方法栈中JNI(即一般说的Native方法)中引用的对象

Java中哪些可以作为GC Roots相关推荐

  1. java jvm调优_(第2部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...

    java jvm调优 这是以前的文章(第3部分,共1部分)的继续:有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的提要 . 事不宜迟,让我们开始使用我们的 ...

  2. java jvm调优_(第1部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...

    java jvm调优 我已经花了几个月的时间考虑审查有关性能调优,JVM,Java中的GC,Mechanical Sympathy等主题的文章和视频的缓存,并最终花了点时间–也许这就是重点我什么时候才 ...

  3. (第1部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...

    我已经花了几个月的时间考虑审查有关性能调优,JVM,Java中的GC,Mechanical Sympathy等主题的文章和视频的缓存,并最终花了点时间–也许这就是重点我什么时候需要做我的智力进步! 感 ...

  4. (第2部分,共3部分):有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的摘要...

    这是以前的文章(第3部分,共1部分)的继续:有关性能调优,Java中的JVM,GC,Mechanical Sympathy等的文章和视频的提要 . 事不宜迟,让我们开始使用我们的下一组博客和视频,印章 ...

  5. Java中常见的CMS GC问题分析与解决(一)

    Java中常见的CMS GC问题分析与解决(一) 目前,互联网上 Java 的 GC 资料要么是主要讲解理论,要么就是针对单一场景的 GC 问题进行了剖析,对整个体系总结的资料少之又少.前车之鉴,后事 ...

  6. java中,什么是GC?GC的基本原理。

    1.什么是GC  GC(GarbageCollection)是垃圾回收机制,在Java中开发人员无法使用指针来自由的管理内存,GC是JVM对内存(实际上就是对象)进行管理的方式.GC使得Java开发人 ...

  7. 《深入理解java虚拟机》笔记2——GC算法与内存分配策略

    说起垃圾收集(Garbage Collection, GC),想必大家都不陌生,它是JVM实现里非常重要的一环,JVM成熟的内存动态分配与回收技术使Java(当然还有其他运行在JVM上的语言,如Sca ...

  8. 可作为GC Roots的对象

    一.名词解释 根搜索算法是JVM用来的判断对象是否存活的算法,此算法基本思路为通过一系列的"GC Roots"对象作为起始点,从这些节点往下搜索,当一个对象和GC Roots不可达 ...

  9. java中出现循环问题如何解决_java如何解决循环引用

    Excel 循环引用产生的原因及解决方法 来源:excel 格子社区 我们打开 ... (Garbage Collection Thread) , 来跟踪每一块分配出去的内存空间, Java 虚拟机 ...

最新文章

  1. LLVM一些语法规则
  2. linux服务器多网卡bond
  3. 网站内链如何布局才能使蜘蛛更喜欢?
  4. java格式_java时间格式转换大全
  5. leetcode 330. Patching Array | 1798. Maximum Number of Consecutive Values You Can Make
  6. mysql 3_mysql3
  7. LNK2019:无法解析的外部符号
  8. 李沐老师的《动手学深度学习PyTorch》中的d2lzh_python包的安装
  9. 转:Linux设备驱动开发(1):内核基础概念
  10. C语言之字符串探究(八):strchr、strstr、strtok
  11. 关于MARATHON和容器的端口映射
  12. excel查重复_智学网怎么登录 智学网怎么查分数 智学网统一登录平台网址
  13. 复制粘贴神器allow copy
  14. Game.Physics.Engine.Development(游戏物理引擎开发)
  15. MacBook使用U盘重装系统
  16. 自定义控件-视觉特效
  17. 两年数据对比柱形图_2018年、2019年的数据对比图!想学习这种对比图的做法!安排...
  18. Python网络编程及WebServer
  19. C语言/C++常见习题问答集锦(五十二) 之职工信息管理系统
  20. 用matlab求恰定方程组的解,初等数论试卷

热门文章

  1. Windows PowerShell 语言快速参考
  2. 利用栈实现递归函数的非递归计算
  3. Windows下Maven 环境配置
  4. Android学习之在Eclipse看源代码的技巧
  5. 静态代码块、非静态代码块、构造函数执行顺序
  6. XML解析的四种方式
  7. ssm框架中前台html如何接受后台的数据_计算机毕业设计中实现java后台的微信小程序...
  8. lstm中look_back的大小选择_使用PyTorch手写代码从头构建LSTM,更深度的理解其工作原理
  9. Shell命令-文件及内容处理之grep(egrep)、join
  10. JAVA中String类以形参传递到函数里面,修改后外面引用不能获取到更改后的值