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、能耗;6、系统稳定性。其中,算法性能通常指的是算法在各种任务上的准确率或成功率,而实时响应能力涉及到算法在实时任务上的表现。 1、算法性能 人工智能:一款好的AI算法应该在所设定的任务上有高准确率和成功率。例如,在图…

    2023年7月30日
    1.5K00
  • 道路绘图软件有哪些

    道路绘图软件有:1、CARD/1;2、Civil3D;3、HintCAD;4、EICAD;5、OpenRoads Designer;6、路线大师;7、海地公路优化设计系统;8、鸿业市政道路设计软件。CARD/1是强大的道路勘测设计一体化软件,以精细的功能、灵活的出图机制、开放的集成环境等特点而著称。…

    2023年4月4日
    6.1K00
  • vscode为什么没有运行按钮

    Visual Studio Code (VSCode) 没有直接的运行按钮主要是因为它是一个轻量级代码编辑器,而不是一个完整的集成开发环境(IDE)。VSCode的设计理念、插件系统、以及其对多种编程语言的支持方式,旨在使它成为一个高度可扩展和个性化的工具。尤其是它的插件系统,为用户提供了极大的灵活…

    2024年4月3日
    13800
  • scrum模型优缺点是什么

    scrum模型优缺点是:注重市场快速反应能力,也即具体应对能力,客户前期满意度高。但scrum敏捷项目管理的缺点是:注重人员的沟通,忽略文档的重要性,若项目人员流动大太,又给维护带来不少难度,特别项目存在新手比较多时,老员工比较累。 一、敏捷开发技术的几个特点和优势 1、个体和交互胜过过程和工具 2…

    2023年4月20日
    84700
  • devops适用于什么环境

    摘要 DevOps,作为一种跨学科的软件开发方法,旨在缩小开发人员(Dev)和信息技术运维人员(Ops)之间的隔阂,以提升系统部署的速度与效率。核心环境包括1、快速迭代环境、2、云计算平台、3、微服务架构、4、有高度协作需求的团队文化。其中,快速迭代环境是DevOps发挥巨大潜力的典型场景,需要快速…

    2024年3月26日
    6000
  • lol角色名查qq的原理是什么

    查询LOL角色名的方式主要包括以下几点:1、官方API接口;2、第三方应用;3、个人隐私设置;4、网络爬虫技术。原本Riot Games提供了开发者接口,可以获取包括玩家基础数据、比赛数据等各类信息,但这个接口并未开放获取QQ号的权限,也无法通过角色名查找对应的QQ号。 1、官方API接口 原本Ri…

    2023年7月12日
    75400
  • 人事oa系统

    人事OA系统通常包含了一系列用于优化企业人力资源管理工作的工具和模块。核心优势包括:1、提升人力资源管理效率、2、简化流程、3、数据分析和决策支持。重点解析第一点,提升人力资源管理效率,理解在于通过自动化手段减少日常行政工作的重复性劳动,比如,员工信息管理、考勤和薪酬计算等,以提供更多时间专注于策略…

    2024年1月12日
    26000
  • 工作进度计划表用什么软件

    工作进度计划表用的软件有:1、Microsoft Project;2、Trello;3、Asana;4、Smartsheet。Microsoft Project 能够帮助我们制定工作进度计划表、分配任务、进行资源分配和预算管理等。 一、功能需求 在选择工作进度计划表的软件时,首先需要考虑的是它是否具…

    2023年3月3日
    63500
  • 怎么查看系统的定时任务

    查看系统的定时任务的步骤:一、 打开任务计划程序;二、查看任务列表;三、查看任务详细信息。在Windows系统中,可以使用任务计划程序来管理定时任务。点击“开始”按钮;搜索“任务计划程序”,并打开该程序。 一、 打开任务计划程序 在Windows系统中,可以使用任务计划程序来管理定时任务。可以通过以…

    2023年4月30日
    2.5K00
  • 什么是CAN总线

    控制器局域网总线(CAN,Controller Area Network)是一种用于实时应用的串行通讯协议总线,它可以使用双绞线来传输信号,是世界上应用较广泛的现场总线之一。CAN协议用于汽车中各种不同元件之间的通信,以此取代昂贵而笨重的配电线束。 一、什么是CAN总线 控制器局域网总线(CAN,C…

    2023年7月28日
    52600

发表回复

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

400-800-1024

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

分享本页
返回顶部