java八股文面试[JVM]——引用计数、可达性分析

要想进行垃圾回收,得先知道什么样的对象是垃圾。

引用计数法

对于某个对象而言,只要应用程序中持有该对象的引用,就说明该对象不是垃圾,如果一个对象没有任何指针对其引用,它就是垃圾。

引用计数法在对象头处维护一个counter,每增加一次对该对象的引用计数器自加1,如果对该对象的引用失联,则计数器自减1。当counter为0时,表明该对象已经被废弃,是垃圾对象,可以被GC回收。但是这种方式一方面无法区分强、软、弱、虚引用类别。另一方面,会造成死锁。假设两个对象相互引用始终无法释放counter,永远不能GC。
 

弊端:如果AB相互持有引用,导致永远不能被回收。 循环引用    内存泄露   -->内存溢出

16461374670483019208ffy

可达性分析/根搜索算法

通过GC Root的对象,开始向下寻找,看某个对象是否可达

image.png

能作为GC Root: 类加载器Thread、虚拟机栈的本地变量表static成员常量引用、本地方法栈的变量等。

虚拟机(栈帧中的本地变量表)中引用的对象。
方法区中类静态属性引用的对象。
方法区中常量引用的对象。
本地方法栈中JNI(即一般说的Native方法)引用的对象。

对象被判定为不可达对象之后就“死”了吗

image.png

知识来源:马士兵教育

JAVA垃圾回收--判断对象是否存活算法(引用计数法和可达性分析法)_引用计数法和可达性分析的区别___Simon'的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/99009.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LINUX内核启动流程-1

1、BIOS启动 硬件设置从OXFFFF0启动:CPU硬件设置加电即进入16位实模式状态运行,CPU硬件逻辑设计为加电瞬间强行将CS的值置为oxF000,IP的值置为0xFFF0,这样CS:IP就指向0xFFFF0这个地址位置。 BIOS程序的入口地址恰恰就是0xFFFF0 ! 也就是说,BIOS程序的第一条指令就设计在…

Linux执行命令

命令格式 主命令 选项 参数(操作对象)例如: 修改主机名 hostname set-hostname 新名称显示/目录下的文件的详细信息 ls -l /命令 内置命令(builtin):shell程序自带的命令。 外部命令:有独立…

java+ssm+mysql水费管理系统

项目介绍: 使用javassmmysql开发的用户水费管理系统,系统包含超级管理员,系统管理员、用户角色,功能如下: 超级管理员:管理员管理、用户管理、用水管理(用水记录、缴费提醒)、水费…

prometheus通过blackbox-exporter监控web站点证书

1 概述 线上站点普遍是https,因此监控https web站点的证书的过期时间,是一个基础性需求。例如,证书过期会导致tls握手失败,进而导致用户无法正常访问web站点。 blackbox-expoter是一个web服务,它暴露了一个接口&#…

企业专题片的优势

企业专题片可以通过生动、感人的方式传达企业形象和信息,引起观众的共鸣和兴趣。它是一种强有力的营销工具,能够提升品牌形象、增加产品或服务的认知度,并在激烈的市场竞争中突显企业的实力和成果。企业专题片具有多个好处和影响,…

SpringBoot整合WebSocket

流程分析 Websocket客户端与Websocket服务器端 前端浏览器和后端服务器的连接通信 HTTP与Websocket对比 服务器端编码 1.引入pom依赖 <!--webSocket--> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-sta…

K8S的介绍和架构

仅供入门 K8S的介绍和架构 一. 什么是kubernetes二、Kubernetes架构和组件 2.1 核心组件 2.1.1 Kubernetes Master控制组件&#xff0c;调度管理整个系统&#xff08;集群&#xff09;&#xff0c;包含如下组件: a、Kubernetes API Serverb、Kubernetes Schedulerc、Kubernet…

二叉树的介绍及二叉树的链式结构的实现(C语言版)

前言 二叉树是一种特殊的树&#xff0c;它最大的度为2&#xff0c;每个节点至多只有两个子树。它是一种基础的数据结构&#xff0c;后面很多重要的数据结构都是依靠它来进行实现的。了解并且掌握它是很重要的。 目录 1.二叉树的介绍 1.1概念 1.2现实中的二叉树 1.3特殊的二叉…

【已解决】PowerPoint在哪里设置“打开密码”?

想要保护PPT文件不能被随意打开&#xff0c;我们可以设置“打开密码”。 PPT有两个设置“打开密码”的地方&#xff0c;下面小编来分享一下&#xff0c;不清楚的小伙伴可以看看哦。 方法1&#xff1a;直接在PPT里设置 打开需要设置保护的PPT&#xff0c;点击菜单栏中的“文件…

类和对象(中)

&#x1f493;博主个人主页:不是笨小孩&#x1f440; ⏩专栏分类:数据结构与算法&#x1f440; C&#x1f440; 刷题专栏&#x1f440; C语言&#x1f440; &#x1f69a;代码仓库:笨小孩的代码库&#x1f440; ⏩社区&#xff1a;不是笨小孩&#x1f440; &#x1f339;欢迎大…

Java实现获取微信小程序scheme码报错

如标题所见&#xff0c;使用Java获取小程序scheme时除了出现文档中的常见错误&#xff0c;我将我调试的时候遇到的错误和解决方式分享出来方便大家少花一部分时间解决该问题。&#xff08;往下划有结论节省时间&#xff09;。 获取scheme码之前需要先获取access_token&#xff…

【iOS】Category、Extension和关联对象

Category分类 Category 是 比继承更为简洁 的方法来对Class进行扩展,无需创建子类就可以为现有的类动态添加方法。 可以给项目内任何已经存在的类 添加 Category甚至可以是系统库/闭源库等只暴露了声明文件的类 添加 Category (看不到.m 文件的类)通过 Category 可以添加 实例…