JVM面试题--垃圾回收

news2024/11/20 2:41:07

对象什么时候可以被垃圾器回收

在学习相关内容之前我们要明白两个问题,我们为什么要垃圾回收?回收哪里的垃圾呢?

垃圾回收主要指的是堆中的对象,堆是一个共享区域,我们创建的对象和数组,都存储在当前位置,但是我们不能无限的创建对象,也不是所有的对象都需要一直存在,如果不进行垃圾回收,那内存迟早会被耗尽的

简单一句就是:如果一个或多个对象没有任何的引用指向它了,那么这个对象现在就是垃圾,如果定位了垃圾,则有可能会被垃圾回收器回收。

如果要定位什么是垃圾,有两种方式来确定,第一个是引用计数法,第二个是可达性分析算法

引用计数法

 

 可达性分析算法

 哪些对象可以作为 GC Root ?

 

 

JVM 垃圾回收算法有哪些? 

标记清除算法

复制算法

标记整理算法

 JVM中的分代回收

 工作机制

 

 MinorGC、 Mixed GC 、 FullGC的区别

总结

JVM有哪些垃圾回收器?

jvm中,实现了多种垃圾收集器,包括:

串行垃圾收集器

 

并行垃圾收集器

 

CMS(并发)垃圾收集器

 

 

 

G1垃圾收集器

 Young Collection(年轻代垃圾回收)

g1里面新生代的内存占比不是固定的,在5%到6%进行调整

 

 Young Collection + Concurrent Mark (年轻代垃圾回收+并发标记) 

 

因为存活对象少,性价比高,可以释放更多内存,所以会挑出回收价值比较高的老年代和eden区和幸存者区进行垃圾回收

Mixed  Collection (混合垃圾回收) 

 当完成了一次混合收集之后,可能还会进行多次混合收集,因为暂停时间有限。把剩下的老年代都重新标记,然后逐渐释放内存。然后又回到新一轮的Young Collection(年轻代垃圾回收)

当然如果一个区域装不下,会存储到一个巨型对象中,如果一块区域不够的话,会分配一块连续的区域给巨型对象

 总结

 强引用、软引用、弱引用、虚引用的区别

在垃圾回收的时候,不同的引用,垃圾回收的情况是不一样的

强引用,即使出现了内存不足,出现了oom异常也不会回收强引用对象,只有gcroot找不到该对象才有可能垃圾回收

软引用,一开始并不会对user垃圾回收,只有在第一次回收之后,仍然内存不足才会回收

 

主要是根据handler来释放外部资源,比如现在user1,2都已经被垃圾回收了,但是这俩对象只是释放了java的堆内存的内部资源,但是他们在使用过程中,可能会使用一些外部资源,这些资源既不是java占用的,也不在java的内存,有可能使用的是直接内存。

那这些内存什么时候释放呢,他们必须要等java对象释放之后,才能去释放这些外部的资源对象,所以我们需要把这些资源放到引用对象队列中,先记录哪些对象被回收了,然后找哪些队列就行了。如图假如xy关联的对象已经被回收了,我们就应该把xy关联的对象回收掉,这个专业释放的线程就是Reference Handler,他就从引用队列中不断的把虚引用对象xy取出来,然后把他们占用的外部内存释放掉。

总结

 

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

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

相关文章

Git基础知识:常见功能和命令行

文章目录 1.Git介绍2.安装配置2.1 查看配置信息 3.文件管理3.1 创建仓库3.2 版本回退3.3 工作流程3.4 撤销修改3.5 删除文件 4.远程仓库4.1 连接远程库4.2 本地上传至远程4.3 从远程库克隆到本地 5.分支管理5.1 创建分支5.2 删除分支5.3 合并分支解决冲突 参考: Git…

(5)将固件加载到没有ArduPilot固件的主板上

文章目录 前言 5.1 下载驱动程序和烧录工具 5.2 下载ArduPilot固件 5.3 使用测试版和开发版 5.3.1 测试版 5.3.2 最新开发版本 5.4 将固件上传到自动驾驶仪 5.5 替代方法 5.6 将固件加载到带有外部闪存的主板上 前言 ArduPilot 的最新版本(Copter-3.6, Pl…

顺序表、链表刷题指南(力扣OJ)

目录 前言 题目一:删除有序数组中的重复项 思路: 题解: 题目二:合并两个有序数组 思路: 分析: 题解: 题目三:反转链表 思路: 分析: 题解: 题目四&…

软考A计划-系统集成项目管理工程师-信息文档和配置管理-上

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 👉关于作者 专注于Android/Unity和各种游…

【LeetCode每日一题】——304.二维区域和检索-矩阵不可变

文章目录 一【题目类别】二【题目难度】三【题目编号】四【题目描述】五【题目示例】六【题目提示】七【解题思路】八【时间频度】九【代码实现】十【提交结果】 一【题目类别】 矩阵 二【题目难度】 中等 三【题目编号】 304.二维区域和检索-矩阵不可变 四【题目描述】 …

【沁恒蓝牙mesh】CH58x flash分区与数据存储管理

本文主要介绍了 沁恒蓝牙芯片 CH58x 的flash 分区与数据存储管理 📋 个人简介 💖 作者简介:大家好,我是喜欢记录零碎知识点的小菜鸟。😎📝 个人主页:欢迎访问我的 Ethernet_Comm 博客主页&…

DPG算法

1 一言以蔽之 (1) DPG是属于确定性策略梯度算法(2)用于解决连续动作空间问题 2 优点和缺点 2.1 优点(1)从理论上可以证明,deterministic policy的梯度就是Q函数梯度的期望,这使得…

SAP数据库表维护视图生成器的使用

在SAP中,经常需要自定义数据库表。而且可能需要人工维护数据库表中的数据,可以通过SM30进行维护数据;但是SM30事务的权限太大,不适宜将SM30直接分配;因此,可以通过给维护表分配事务代码,来达到控…

云曦暑期学习第三周——ctfshow--php特性(89-104)

目录 web89 preg_match函数 、数组 web90 intval()函数、强比较 web91 正则修饰符 web92 intval()函数、弱比较 web93 八进制、小数点 web94 strpos() 函数、小数点 web95 小数点 web96 highlight_file() 下的目录路径 web97 数组 web98 三目运算符 web9…

Windows搭建Snort环境及使用方式

目录 0x01 前置环境0x02修改配置文件0x03 自测0x04 使用0x05 感言 0x01 前置环境 环境描述windows10snort2.9.2https://www.snort.org/downloads 先把上面环境下载好! 需要注意的是安装npcap这个软件 0x02修改配置文件 软件安装目录:C:/Snort/ 配置文…

有哪些开源和非开源的项目管理工具?

开源和非开源项目管理工具各有其特点和优势。下面是一些常见的开源和非开源项目管理工具以及它们的简要介绍。 开源项目管理工具: OpenProject:OpenProject 是一个功能强大、易于使用的开源项目管理工具。它提供了项目计划、任务管理、团队协作、文档管…

Python开发环境Spyder介绍

前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 Spyder简介 Spyder (前身是 Pydee) 是一个强大的交互式 Python 语言开发环境, 提供高级的代码编辑、交互测试、调试等特性,支持包括 Windows、Linux 和 OS X 系统。 👇 &#x1f44…

【多模态】BLIP——统一视觉语言理解和生成的引导语言图像预训练模型

多模态指的是多种模态的信息,包括:文本、图像、视频、音频等。而多模态研究的就是这些不同类型的数据的融合的问题。目前大多数工作中,只处理图像和文本形式的数据,即把视频数据转为图像,把音频数据转为文本格式。 目录…

PHP 前后端分离,运行配置

H5 WEB目录:安装 yarn install、npm install (依赖包) 在电脑:安装nodejs Composer下载 :https://getcomposer.org/

彭迦信和梁柱搭班两年,腾讯音乐总市值相对减少约200亿美元

8月1日、8月2日,腾讯音乐-SW(HK:01698,下称“腾讯音乐”)在港交所的股价连续两日下跌,跌幅分别为2.21%和3.02%。按2023年8月2日的收盘价计算,腾讯音乐的港股市值约为454.17亿港元,总市值约为882…

算法:DFS【深度优先搜索】

概念: 深度优先搜索(Depth First Search)简称为DFS。一种用于遍历或者搜索树或图的算法。 沿着树的深度遍历树的所有节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过或在搜寻时结点不满足条件,则搜索将回溯…

《HeadFirst设计模式(第二版)》第三章代码——装饰者模式

代码文件结构: 星巴兹案例: CondimentDecorator package Chapter3_DecorativeObjects.Decorators;import Chapter3_DecorativeObjects.Beverage;/*** Author 竹心* Date 2023/8/3**/public abstract class CondimentDecorator extends Beverage {Bever…

opencv-34 图像平滑处理-双边滤波cv2.bilateralFilter()

双边滤波(BilateralFiltering)是一种图像处理滤波技术,用于平滑图像并同时保留边缘信息。与其他传统的线性滤波方法不同,双边滤波在考虑像素之间的空间距离之外,还考虑了像素之间的灰度值相似性。这使得双边滤波能够有…

Scratch 教程 -- 逐字化输出

首先我们来探讨一下对于一个逐字化模块(自定义积木),有哪些需要设置的参数(请注意,在这里我会先提出一种常规且简便的写法,再进一步讲述其它的优化版本) 1.内容:对于一个文本,其内容是一定需要的(不然你还用啥逐字化啊…

新概念英语的网盘资源

新版新概念英语1-4册全部视频和课本_免费高速下载|百度网盘-分享无限制百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.baidu.com/s/18wyeA#l…