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

news2024/11/27 11:41:01

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

引用计数法

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

引用计数法在对象头处维护一个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.coloradmin.cn/o/976541.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

论坛系统公共组件部分

1.在Java⽬录下创建包,在Resources⽬录下创建⽂件夹,结构如下 ├─java # java⽂件区 │ └─com │ └─example │ └─demo │ ├─common # 公共类 │ ├─config # 配置…

DBeaver新建Elasticsearch连接报错Error downloading driver libraries解决方案

1.软件版本背景 DBeaver Ultimate 22.1.0 elasticsearch 7.10 可能因DBeaver的版本不同,导致页面略有差异,请自行脑补! 2.新建数据库(Elasticsearch)连接 点击新建数据库连接按钮 选择Elasticsearch 填写相关配置…

javaScript:节点操作

目录 前言 常用的节点操作 innerHTML 的两个弊端(补充) createElement(标签名)使用dom方法创建一个元素 父元素.appendChild(子元素) 添加到父元素 注意 指定插入 父元素.insertBefore(要添加的元素,父元素中的指定子元素) 注意&…

Android Studio 汉化

一、汉化: 查看版本号,查看Android Studio版本,根据版本下载对应的汉化包。例如我的是223。 下载汉化包: 中文语言包下载地址 找到对应的版本 回到Android Studio 1、进入设置 2、从磁盘安装插件 3、选择下载好的包点击OK 4、…

kibana设置ILM

kibana设置ILM 1. 背景 kibana version: v7.9.3 2. 设置ILM 2.1 创建索引生命周期策略 2.1.1 热阶段 首先需要先创建索引生命周期策略,在索引模板中可以引用创建好的索引生命周期策略。 策略名称: 引用该策略是需要用,例如设置为&#…

【LeetCode75】第四十七题 迷宫中离入口最近的出口

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 题目给我们一个数组形式的地图,让我们找出离入口最近的出口,出口就是地图的边界。 那么这道题可以使用DFS也可以…

Vue+elementUI 导出word打印

import JSZipUtils from "jszip-utils"; import JSZip from "pizzip"; import Docxtemplater from "docxtemplater"; npm安装以上依赖 首先维护个word模板 导出方法 //导出wordskipOutWord(row) {var printData rowconst data JSON.parse(JS…

作品集(陆续上传中)

智能家居---不断完善中 家居-CSDN直播 家居 语音刷抖音 --- 基于串口和adb 基于守护进程的语音刷抖音-CSDN直播 基于守护进程的语音刷抖音 海天一色项目 --- 船舶靠港零碳排加热器 FTP云盘 --- 多进程和socket FTP云盘-CSDN直播 FTP云盘

JS 删除数组中的第一项和最后一项

JS 删除数组中的第一项和最后一项 需求分析 需求 JS 删除数组中的第一项和最后一项 分析 删除数组第一个元素 array.shift() /* 1. shift() 方法用于把数组的第一个元素从其中删除。 2. 返回值: 被删除的元素(即数组原来的第一个元素的值)。…

Unity——LitJSON的安装

一、LitJSON介绍 特点 LitJSON是一个轻量级的C# JSON库,用于在Unity游戏开发中进行JSON数据的序列化和反序列化操作。它提供了简单而高效的接口,帮助开发者处理JSON数据。 以下是LitJSON库的一些主要特点和功能: 1. 高性能:Lit…

死锁是什么?死锁的字节码指令了解?

用幽默浅显的言语来说死锁 半生:我已经拿到了机考的第一名,就差笔试第一名了 小一:我已经拿到了笔试的第一名,就差机考第一名了 面试官:我很看好你俩,继续"干", 同时拿到2个的第一名才能拿到offe…

华为云云服务器评测|基于云服务器的minio部署手册

华为云云服务器评测|基于云服务器的minio部署手册 【软件安装版本】【集群安装(是)(否)】 版本 创建人 修改人 创建时间 备注 1.0 jz jz 2023.9.2 minio华为云耀服务器 一. 部署规划与架构 1. 规…

降低LLM的幻觉风险:实用策略与技术

一、前言 近年来,大语言模型的快速发展为构建更智能和更人性化的AI系统提供了很多可能性。像GPT-3.5、GPT-4、Bard、Claude 2和LLaMa 2等大语言模型 (LLM) 在个人助理或聊天机器人应用领域展示了强大的潜力,可以生成流畅而令人惊叹的响应来回答用户的问…

新学期第一篇博客

文章目录 一、加入QQ群(一)QQ群号(二)加群要求 二、加入云班课三、使用思维导图(一)下载XMind软件(二)安装XMind软件(三)创建思维导图1、选择模板&#xff08…

【C++】拷贝对象时,编译器的偷偷优化

你知道吗?对于连续的”构造拷贝构造“,编译器其实是会默默做出优化的。👻 如果你不知道这个知识点的话,那下面这道笔试题就要失分了😵。 本篇分享一个关于编译器优化的小知识,看完本篇,你就能…

阿里云服务器退款规则_退款政策全解析

阿里云退款政策全解析,阿里云退款分为五天无理由全额退和非全额退订两种,阿里云百科以云服务器为例,阿里云服务器包年包月支持五天无理由全额退订,可申请无理由全额退款,如果是按量付费的云服务器直接释放资源即可。阿…

C++ Primer Plus 第六章笔记

目录 if 语句 if else语句 if else if else结构 逻辑运算符--&&,||和! cctype字符函数库 条件运算符(三目运算符) switch语句 continue和break语句 基本文件输入/输出 总结:本文主要介绍了分支语句和if判断语句,运算符和简…

vue 浏览器记住密码后,自动填充账号密码错位

亲测有效!!! 遇到的场景: 浏览器记住密码后,登录时自动填充账号密码,由于登录时只需要这两个字段所以没问题,见图一,但注册时,账号密码不在一处,见图二 原本账号应该在…

浅谈JVM内存模型与GC垃圾回收

目录 1. 摘要 2. JVM 简单介绍 3. 线程私有的有哪些? 4. 线程共享的有哪些? 5. JVM 栈中程序是如何操作数据的? 6. 内存泄露是什么意思? 7. 堆内存的分配规则 8. 垃圾回收算法 8.1 垃圾回收机制简单概括 8.2 标记清理算法…

UNIAPP之js/nvue混淆探索

因项目需要对UNIAPP的js混淆做了一些调研 混淆教程: https://uniapp.dcloud.net.cn/tutorial/app-sec-confusion.html 按照教程配置进行打包正式包进行混淆 下载正式包将 .ipa改为.zip 解压获取到HBuilder.app 右键显示包内容 获取到混淆的key 不同时间进行打包混淆同一文…