Java中什么样的对象才能作为gcroot,gcroots有哪些呢

在java技术体系里面,固定可作为GC Roots的对象包括以下几种:1、在虚拟机栈中引用的对象,例如各个线程被调用的方法堆栈中使用到的参数、局部变量、临时变量等;2、在方法区中类静态属性引用的对象,例如java类的引用类型静态变量。

Java中什么样的对象才能作为gcroot,gcroots有哪些呢-Worktile社区

一、Java中什么样的对象才能作为gcroot

在java技术体系里面,固定可作为GC Roots的对象包括以下几种:

1、在虚拟机栈中引用的对象,例如各个线程被调用的方法堆栈中使用到的参数、局部变量、临时变量等。

2、在方法区中类静态属性引用的对象,例如java类的引用类型静态变量。

3、在方法区中常量引用的对象,例如字符串常量池里的引用。

4、在本地方法栈中JNI引用的对象。

5、Java虚拟机内部的引用,如基本数据类型对应的class对象,一些常驻的异常对象等,还有类加载器。

6、所有被同步锁持有的对象。

7、反映Java虚拟机内部情况的JMXBean、JVMTI中注册的回调、本地代码缓存等。

除了这些固定的GC Roots集合外,根据用户所选用的垃圾收集器以及当前回收的内存区域不同,还可以有其他对象临时性地加入,共同构成完整GC Roots集合。

作者:孤家寡人
链接:https://www.zhihu.com/question/50381439/answer/1408268664
来源:知乎

二、gcroots有哪些

在Java语言中,GC Root主要包括以下几类元素:

1、虚拟机栈中引用的对象
比如:各个线程被调用的方法中使用到的参数、局部变量等。

2、本地方法栈内JNI(通常说的本地方法)引用的对象

3、方法区中类静态属性引用的对象
比如:Java类的引用类型静态变量

4、方法区中常量引用的对象
比如:字符串常量池(string Table) 里的引用

5、所有被同步锁synchronized持有的对象

6、Java虚拟机内部的引用。
基本数据类型对应的Class对象,一些常驻的异常对象(如:
NullPointerException、OutOfMemoryError) ,系统类加载器。

7、反映java虚拟机内部情况的JMXBean、JVMTI中注册的回调、本地代码缓存等

8、除了这些固定的GCRoots集合以外,根据用户所选用的垃圾收集器以及当前回收的内存区域不同,还可以有其他对象“临时性”地加入,共同构成完整GC Roots集合。比如:分代收集和局部回收(Partial GC)。

延伸阅读

gcroots是什么

常说的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持有”的了。

文章标题:Java中什么样的对象才能作为gcroot,gcroots有哪些呢,发布者:小编,转载请注明出处:https://worktile.com/kb/p/37469

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小编小编认证作者
上一篇 2023年2月8日 下午4:34
下一篇 2023年2月8日 下午4:53

相关推荐

  • 云真机的作用是什么

    云真机的作用是:1、解决企业移动设备匮乏;2、提升研发测试工作效率;3、节省资金降低折损率;4、解决测试报告问题;5、提升产品竞争力。云真机平台基本上可以提供市面所有移动设备机型、品牌、系统、分辨率等设备,很好的解决了企业移动设备困乏的问题。 一、解决企业移动设备匮乏 云真机平台基本上可以提供市面所…

    2023年5月9日
    34000
  • 大数据与云计算的关系是什么

    大数据与云计算的关系是:云计算是基础,没有云计算,无法实现大数据存储与计算。大数据是应用,没有大数据,云计算就缺少了目标与价值。两者都需要人工智能的参与,人工智能是互联网信息系统有序化后的一种商业应用。 一、大数据与云计算的关系 云计算是基础,没有云计算,无法实现大数据存储与计算。大数据是应用,没有…

    2023年1月9日
    4.2K00
  • 大数据和云计算有什么区别

    大数据和云计算是现代技术领域的两个重要概念。它们的主要区别包括:1.定义和目的不同;2.技术实现差异;3.数据处理方式的不同;4.安全和隐私考量;5.部署和可扩展性;6.应用和业务场景。虽然它们在某些方面有所重叠,但它们解决的问题和所提供的解决方案有所不同。 1.定义和目的不同 2.技术实现差异 3…

    2023年7月16日
    54800
  • 大型oa系统

    标题:构建高效的大型OA系统解析 解析大型企业级OA系统的关键要素包括:1、强大的功能模块集成、2、高度的系统安全性、3、流畅的用户交互体验、4、灵活的扩展性与可维护性。 在这些要素中,系统的安全性尤其重要,需采取包括数据加密、登录验证、访问控制和网络安全策略等多层次安全措施,确保敏感数据的保护和防…

    2024年1月12日
    20300
  • 如何管理好政工项目班组

    要管理好政工项目班组,关键在于明确目标、强化培训、加强沟通、确保透明度和激励团队。其中,明确目标是基础,要确保每个成员都清楚班组的工作目标及预期成果,这样做可以增强团队成员之间的共同认识,为后续工作的顺利进行打下坚实的基础。明确目标涉及到确定班组的短期及长期目标、分解任务并明确每个成员的责任范围。这…

    2024年4月10日
    4700
  • 新建项目如何开展财务管理

    对于新建项目来说,开展财务管理是确保项目可持续发展与取得成功的关键因素之一。细致的预算规划、周到的资金安排、严格的成本控制、及时的财务报告和分析,以及合规的税务规划,构成了新建项目财务管理的核心内容。其中,细致的预算规划尤为重要,它为项目的整个生命周期提供了财务蓝图,帮助管理者预见和规遍未来的资金需…

    2024年4月10日
    8400
  • 如何通过DevOps实现持续集成和持续交付(CI/CD)

    持续集成(Continuous Integration,CI)和持续交付(Continuous Delivery,CD)是DevOps实践的重要组成部分,通过自动化流程,帮助团队实现快速、高质量的软件发布。CI的核心是在代码仓库中频繁地集成开发者的代码修改,涉及代码版本控制、自动化构建、单元测试、代…

    2023年11月18日
    40400
  • 农业滴灌项目区如何管理

    农业滴灌项目区的管理需要综合考虑水源管理、滴灌系统操作与维护、作物需水管理、肥料和农药的合理施用、以及数据监测和分析等多个方面,以保证滴灌系统的高效运行和作物的最优生长条件。首先,强调水源管理的重要性。 其次,确保滴灌系统的定期维护和操作;再者,通过精细的作物需水管理来调控灌溉;最后,结合肥料和农药…

    2024年4月10日
    4600
  • DevOps如何提高质量

    开门见山地说,DevOps提高质量的手段主要集中在持续集成、自动化测试、即时反馈和持续部署四大技术实践上。这些手段使得软件交付过程更加流畅、效率更高,同时减少人为错误,确保产品符合质量要求。持续集成是一种实践,在这种实践中,代码变更会立即集成到共享存储库中。这通常伴随着自动化测试和构建,确保每次集成…

    2024年1月18日
    17000
  • Java中的容器化和Docker如何使用

    容器化在Java中是指将Java应用与其运行所需的依赖打包到一个独立的容器中,以实现快速部署和可移植。Docker是一个开源的容器化平台,它使开发者能够轻松地创建、部署和管理容器化的应用程序。1 利用Docker进行容器化可以显著简化Java应用的构建、测试和部署流程。2 它能够保障应用在不同环境间…

    2024年1月8日
    30700

发表回复

登录后才能评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部