JVM垃圾回收算法及Java引用

news2024/11/27 6:26:01

目录

Java垃圾回收算法

1.标记清除算法:Mark-Sweep

2.复制算法:copying

3. 标记整理算法:Mark-Compact

4.分代收集算法

5.新生代垃圾回收算法:复制算法

6.老年代:标记整理算法

7.分区收集算法

Java引用

1.Java强引用

2.Java弱引用

3.Java软引用

4.Java虚引用


Java垃圾回收算法

1.标记清除算法:Mark-Sweep

1.原理:标记清楚算法分为两个阶段:

        标记:标记出所有需要回收的对象

        清楚:回收被标记的的对象所占用的空间

2.缺点:内存碎片化问题严重,大对象可能无法找到可利用空间

 

2.复制算法:copying

1.原理:为解决标记清楚算法内存碎片化提出的算法。将内存按内存容量划分为等大小的两块,每次使用其中一块,当这一块内存满后将存活对象复制到另一块上,将已经使用的内存清理掉。

2.缺点:可用内存只有原来的一半;存活数量增多后,由于需要复制,算法效率降低。

3. 标记整理算法:Mark-Compact

1.原理:结合标记清除算法+复制算法提出的算法。

        标记:标记出所有需要回收的对象

        整理:将存活对象移向内存的一端,之后清楚标记对象

        

 

4.分代收集算法

原理:根据对象存活的不同生命周期,将内存划分为不同区域。

        一般将GC堆划分为老年代和新生代,老年代中,每次垃圾回收只有少量对象需要被回收;新生代中,每次垃圾回收会被大量垃圾需要被回收。根据不同代所属区域选择不同算法

5.新生代垃圾回收算法:复制算法

        新生代中存活对象少,有大量垃圾需要被回收,因此选择复制算法,付出少量存活对象的复制成本即可完成收集

6.老年代:标记整理算法

        老年代中的对象存活率高,使用内存复制会付出大量复制成本,使用标记整理算法能够腾出空闲内存。

7.分区收集算法

原理:将整个堆空间划分为连续的不同小区间,每个区间独立使用,独立回收

优点:可以控制一次回收多少小区间,而不是直接回收整个堆。根据目标停顿时间,合理回收若干个小区间,从而减少一次GC所产生的停顿时间(用户等待时间)。

Java引用

1.Java强引用

定义:将一个对象赋给一个引用遍历,该引用变量就是一个强引用;强引用是使用最普遍的引用

缺点:一个对象被强引用变量引用时,就处于可达状态,因此不会被垃圾回收机制回收,容易造成Java内存泄漏

2.Java弱引用

定义:使用WeakReference类实现,弱引用的对象只要垃圾回收机制一运行,无论内存空间是否足够,都会回收该对象所占用的内存。

3.Java软引用

定义:使用SoftReference类实现,软引用的对象当系统内存足够时不会被回收,内存不足时再被回收

4.Java虚引用

定义:使用PhantomReference类实现,必须与引用队列联合使用,无法单独使用

作用:跟踪对象被垃圾回收的状态

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

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

相关文章

迪赛智慧数——其他图表(漏斗图):高考生和家长志愿填报困扰问题感知

效果图 高考前的紧张,等分数的忐忑,填志愿的纠结,录取前的煎熬,希望就在不远的前方。 志愿填报心有数,就业前景要关注。收集信息要先行,切莫匆匆抉择定。热门专业不追捧,选择院校不跟风。兴趣爱…

阿里云异构计算GPU、FPGA、EAIS云服务器详细介绍说明

阿里云阿里云异构计算主要包括GPU云服务器、FPGA云服务器和弹性加速计算实例EAIS,随着人工智能技术的发展,越来越多的AI计算都采用异构计算来实现性能加速,阿里云异构计算云服务研发了云端AI加速器,通过统一的框架同时支持了Tenso…

[Daimayuan] 模拟输出受限制的双端队列(C++,模拟)

给你一个输出受限的双端队列,限制输出的双端队列即可以从一端插入元素,弹出元素,但是另一端只可以插入不可以删除元素。即每次你可以执行以下三种操作的其中一种: 在左边压入一个字符在右边压入一个字符弹出最左边的字符 现在给你…

机器学习实战案例用户RFM模型分层(八)

每个产品和公司都需要做用户的精细化运营,它是实现用户价值最大化和企业效益最优化的利器。通过将用户进行分层:如高价值用户、潜在价值用户、新用户、流失用户等,针对不同群体制定个性化的营销策略和客户服务,进而促进业务的增长…

【Java|golang】2465. 不同的平均值数目

给你一个下标从 0 开始长度为 偶数 的整数数组 nums 。 只要 nums 不是 空数组,你就重复执行以下步骤: 找到 nums 中的最小值,并删除它。 找到 nums 中的最大值,并删除它。 计算删除两数的平均值。 两数 a 和 b 的 平均值 为 (a…

(转载)基于蚁群算法的二维路径规划(matlab实现)

1 理论基础 1.1 路径规划算法 路径规划算法是指在有障碍物的工作环境中寻找一条从起点到终点的、无碰撞地绕过所有障碍物的运动路径。路径规划算法较多,大体上可分为全局路径规划算法和局部路径规划算法两类。其中,全局路径规划方法包括位形空间法、广…

Android进阶之路 - 字体自适应

开发中有很多场景需要进行自适应适配,但是关于这种字体自适应,我也是为数不多的几次使用,同时也简单分析了下源码,希望我们都有收获 很多时候控件的宽度是有限的,而要实现比较好看的UI效果,常见的处理方式应…

深度学习的低秩优化:在紧凑架构和快速训练之间取得平衡(上)

论文出处:[2303.13635] Low Rank Optimization for Efficient Deep Learning: Making A Balance between Compact Architecture and Fast Training (arxiv.org) 由于篇幅有限,本篇博客仅引出问题的背景、各种张量分解方法及其分解FC/Conv层的方法&#x…

js算法基础01 --- 数组对象去重

菜狗子的自我救赎01 01- 数组对象去重reduce原生js 利用newObj 和 newArr利用空数组 和 标识flag多条件去重 假设 不知拿id 做对比 还有id2 id 3利用双指针 splice 01- 数组对象去重 把下面数组对象去重 let arr [{ id: 1, name: 周瑜 },{ id: 3, name: 王昭君 },{ id: 2, na…

手动管理采购订单周期的挑战以及如何应对

在过去的几十年里,采购实践有了显著的进步。精明的采购领导正在寻求额外的周期时间的提升。这一点至关重要,因为减少周期时间可以大大提升周转时间,降低你的采购职能的整体成本。它也使采购团队能够将较多的时间用于战略活动。 但是&#xf…

【八大排序(一)】排序还只会用冒泡?进来给我学!

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:八大排序专栏⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习排序知识   🔝🔝 插入,希尔排序 1. 前言🚩2. 插…

【Protobuf】Protobuf快速使用 Java版、Python版

【Protobuf】Protobuf快速使用 Java版、Python版 Protobuf介绍 快速使用(Java版) 创建 .proto文件,定义数据结构 安装Protobuf编译器(二选一) 使用IDEA编译(二选一) 使用编译后的文件 快速使用(Python版) 创建 .proto文件,定义数据结构 安装Prot…

【Spring源码解读三】IoC容器之AnnotationConfigApplication的refresh()刷新方法其二

invokeBeanFactoryPostProcessors() PriorityOrdered接口 Ordered接口 invokeBeanDefinitionRegistryPostProcessors() registerBeanPostProcessors() getBeanNamesForType() initMessageSource() initApplicationEventMulticaster() onRefresh() registerListeners()…

听我一句劝,别去外包,干了三年,真废了....

先说一下自己的情况,大专生,18年通过校招进入湖南某软件公司,干了接近4年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

找不到xinput1_3.dll怎么办?xinput1_3.dll丢失的四个修复方法

在我们打开游戏的或者软件的时候,电脑提示“找不到xinput1_3.dll,无法继续执行此代码”怎么办?相信困扰着不少小伙伴,我再在打开吃鸡的时候,然后花了一上午的时候时间研究,现在终于知道xinput1_3.dll文件是…

Windows10系统开启 Telnet客户端 功能

1、应用场景 在实际工作中,经常有查看机器端口连通性的场景(主要为了确认某台机器上的服务是否正常,比如:查看的端口 9091) telnet 192.168.166.159 9091如下状态说明telnet 端口是通的 Ctrl ] ,退出Telnet连接&a…

探究Vue源码:mustache模板引擎(2) mustache使用方法

mustache是最早的模板引擎 比vue的诞生还要早很多 而他的语法 就是基于 {{ }} 这样的双花括号 mustache属于通用性的应用 他既可以在浏览器中直接用 也可以在npm中使用 这里 我们为了方便 就直接去拿在浏览器中使用的包了 没必要再自己搭个环境 大家可以下载我上传的资源 vue源…

职场老油条表示真干不过,部门新来的00后测试员已把我卷崩溃,想离职了...

在程序员职场上,什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事,我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事,可遇不可求,向他学习还来不及呢。 真正让人反感的,是技术平平&#x…

Linux学习之vim正常模式和插入模式

使用vim新建或者打开一个文件后,首先进入的就是正常模式,从正常模式按不同的按键能够进入其他三种模式。 在正常模式下,按i,I(大写的i键),a,A,o(小写的o&…

【3DsMAX】从零开始建房(6)

目录 1. 制作广告牌 2. 制作屋顶小船船身 1. 制作广告牌 先创建一个长方体 转换为可编辑多边形,选中面,插入 挤出 添加两个圆柱体作为支架 用轮廓工具收一下面 选中这三个物体打组 统一材质 设置线条颜色为黑色 2. 制作屋顶小船船身 先添加一个球体&…