Jvm对象回收算法-JVM(九)

news2024/9/23 17:16:39

上篇文章介绍了jvm运行时候对象进入老年代的场景,以及如何避免频繁fullGC。

Jvm参数设置-JVM(八)

  • 老年代分配担保机制

这个机制的目的是为了提升效率,在minorGC之前,会有三次判断,之后再次minorGC速度会很快。

  1. 老年代剩余空间是否 大于 年轻代里现在所有对象

大于的话则直接minorGC

  1. 如果不大于则看看参数是否配置:-XX:-HandlerPromotionFailure

没有配置则直接fullGC

  1. 配置了则看看 老年代剩余可用空间是否 大于 每次minorGC后进入老年代的平均值

大于的话直接minorGC,否则直接fullGC

FullGC之后最后还是会minorGC。

  • 对象内存回收
  1. 引用计数器

这个方法简单效率高,但目前主流虚拟机没有用表格这个算法,主要不能解决循环引用问题。因为两者相互引用,导致他们引用计数器不为0,而引用计数器必须是为0才会回收。

 

  1. 可达性分析算法

将GC roots对象作为节点,向下搜索,找到对象都标记为 非垃圾对象,其余未标记的都是 垃圾对象。

GC roots根节点,:线程栈本地变量,静态变量,本地方法栈变量等。

  • 常见引用类型

引用类型:强引用,软引用,弱引用,虚引用

  1. 强引用:User user = new User();
  2. 软引用:用SoftReference软引用类型包裹对象, 正常不会被回收,但GC做完释放不出空间放新对象,则会回收。软引用可以作用在内存敏感的高速缓存。

SoftReference<User> user = new SoftReference<User>(new User());

软引用在实际场景很重要,例如浏览器后退按钮,这个后退是重新加载还是从缓存里取,这要看实际应用场景。

  1. 如果一个浏览器进入新页面就内容回收,则需要重新加载。
  2. 如果浏览页面内存很大,放在内存会内存溢出。
  1. 弱引用GC每次会直接回收。

WeakReference<User> user = new WeakReference<User>(new User());

  1. 虚引用也成为幽灵引用,几乎不用。
  • finalize()方法最终判断对象是否存活

当对象背回收之前,会判断这个对象是否覆盖了finalize方法,如果覆盖了,在回收之前则会执行这个方法,不回收则不执行。

既然在回收之前会执行,那么自然可以自救,可以把当前对象放入静态list集合保证在使用则不会被收回。(不推荐使用)

  • 如何判断一个类是无用的类

方法区如果发生回收的条件,必须这个类是无用的类:

  1. 该类所有对象实例都被回收,也就是java堆中不存在该类任何实例。
  2. 加载该类的ClassLoader已经被回收。(CLassLoader回收条件很苛刻)

前面说过引导类(核心包)BootStrapClassLoader,扩展ClassLoader以及appClassLoader应用程序的classLoader,这些不会被回收。

但是jsp的加载器,每个jsp都对应一个新的加载器,这种加载器就很容易被回收。(一般自定义的才会回收)

  1. 该类的java.lang.Class对象没有地方被引用,无法在任何地方通过反射访问该类信息。

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

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

相关文章

Python开发项目基于改进高斯混合模型的图割算法

博主介绍&#xff1a;擅长Java、微信小程序、Python、Android等&#xff0c;专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精彩专栏推荐订阅&#x1f447;&#x1f3fb; 不然下次找不到哟 Java项目精品实战案例…

实体门店数字化转型应该注意什么?数字化门店如何做?

​当今越来越多得商家都在打造自己得数字化门店&#xff0c;线上经营已经成为时代的必选题&#xff0c;那么数字化门店都有什么优势呢&#xff1f; 1、线上门店的展示 使客户可以在数字门店的线上平台上进入商家的线上商城&#xff0c;查看和浏览门店的品牌信息和活动&#x…

jpg文件怎么压缩到最小?如何对图片进行压缩?

在日常社交聊天中&#xff0c;我们经常会遇到图片或表情包太大无法发送的情况&#xff0c;这时候我们可以通过jpg压缩&#xff08;https://www.yasuotu.com/jpg&#xff09;缩小图片kb&#xff0c;如果不想下载软件&#xff0c;可以选择使用浏览器在线图片压缩&#xff0c;下面…

iview的表格行内编辑,input和select组件使用方向键切换输入

如果表格中的输入框和下拉框需要实现方向键切换选择&#xff0c;效果如图&#xff1a; 使用的是IView的UI框架和Vue2&#xff0c;核心是在输入框和下拉框上添加按键监听事件&#xff0c;监听按键对应方向应该要完成的操作&#xff0c;比如当前在Name列的第一行&#xff0c;按【…

C++之非const转const类型(一百五十五)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…

QT-qcustomplot应用示例

QT-qcustomplot应用示例 前言一、演示效果二、关键程序三、资源链接 前言 提供曲线显示示例过程 一、演示效果 二、关键程序 // 生成曲线图 void QtWidgetsApplication1::setupQuadratic() {if (m_strViewMachineIndexList.size() < 0)return;// 进度条默认0ui.progressB…

能源在线监测管理系统平台

能源在线监测管理系统平台是一种集能源数据采集、处理、分析、展示和管理于一体的综合性平台。该平台通过现代信息技术手段&#xff0c;对企业、机构或个人的能源消耗、能源质量、能源成本等方面进行实时监测和管理&#xff0c;为企业和政府部门的能源管理和决策提供有力支持。…

【语音处理】基于加权压力匹配方法(WPMM)的私人声音系统研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

lammps教程:ovito转换data文件格式的方法

我是小马老师&#xff0c;本文与你分享一些关于lammps data文件格式转换的技巧和经验。 lammps是一个高度可定制的分子动力学模拟软件&#xff0c;它提供了丰富的功能和灵活的输入文件格式。其中&#xff0c;data文件是lammps中最常用的输入文件之一&#xff0c;用于描述模拟系…

Epoll 到底是什么?“不” 简单的网络I/O模型?

1 简介 Epoll 是个很老的知识点&#xff0c;是后端工程师的经典必修课。这种知识具备的特点就是研究的人多&#xff0c;所以研究的趋势就会越来越深。当然分享的人也多&#xff0c;由于分享者水平参差不齐&#xff0c;也产生的大量错误理解。 今天我再次分享 epoll&#xff0…

USB转GSM模块发送中英文测试

目录 使用模块前注意事项模块测试发送英文短信发送中文短信手机收到短信页面常见问题 总结 使用模块前注意事项 使用USB转GSM模块要 注意 两点: 1.所在地要有2G基站,因为这是2G信号产品。 2.最好使用移动卡&#xff0c;有些地方电信和联通卡无法使用。 模块测试 这里介绍模块…

在安卓手机搭建kali环境,手机变成便携式渗透神器

简介 kali是著名的黑客专用系统&#xff0c;一般都是直接装在物理机或者虚拟机上&#xff0c;我们可以尝试把kali安装在手机上&#xff0c;把手机打造成一个便携式渗透神器。 我们需要下载以下3款软件&#xff1a; (1).Termux(终端模拟器) (2).AnLinux(里边有各种安装liunx…

GPT时代,寻找讯飞星火大模型的算力支点

作者 | 辰纹 来源 | 洞见新研社 大模型的“涌现”还在持续。 5月底举行的中关村论坛上&#xff0c;有专家披露&#xff0c;中国10亿级参数规模以上的大模型已经发布了79个&#xff0c;刚刚结束的世界人工智能大会上&#xff0c;又有一批大模型批量发布。 大模型的热度居高不…

华大HC32F460 TCP Server实验

目录 1.实验目标 2.实验准备 3.主流程图 4.驱动代码 5.实验步骤 1.实验目标 本实验使用W5500服务器功能&#xff0c;通过串口实现与本地客户端透传数据。 2.实验准备 硬件搭建&#xff1a;ZW-HC32F460-BZ标准版开发板1套 软件搭建&#xff1a;MDK5.22 3.主流程图 4.驱动…

css实现按钮圆角渐变样式

最终成果图&#xff1a; 背景&#xff1a; 最近项目数据大屏这个样式给我卡住了&#xff0c;起因是UI设计想要按钮边框渐圆角背景透明渐变&#xff0c;我查找了好多资料也在问答里提问&#xff0c;都没有实现初始样式。原因是如果想用渐变边框就会使用到属性border-image&#…

在Microsoft Excel中带单位的数字如何求和

使用 Excel 中的 SUM 函数对一系列单元格、整列或非连续单元格求和。要创建出色的 SUM 公式&#xff0c;请将 SUM 函数与其他 Excel 函数结合使用&#xff0c;然而 SUM 函数不能直接对带单位的数字进行求和。 当直接相加带单位的几个数字会出现如下错误&#xff1a; 错误的原因…

811. 交换数值

链接&#xff1a; https://www.acwing.com/problem/content/813/ 题目&#xff1a; 输入两个整数 xx 和 yy&#xff0c;请你编写一个函数, 交换两个整数的数值并输出交换后的 xx 和 yy。 C中的格式为&#xff1a;void swap(int &x, int &y)。 Java中的格式为&#xff1…

【软件测试】Git 将项目本地推送至GitHub与Gitee(详细)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Gitee拉取Github仓…

KeyShot 2023 Pro 对 Mac 和 Windows 系统的要求

KeyShot 2023 Pro 是一款功能强大的计算机辅助设计&#xff08;CAD&#xff09;渲染软件&#xff0c;它为用户提供了高质量的视觉效果和逼真渲染。 KeyShot 2023 Pro for Mac可以与各种主流 CAD 软件进行集成&#xff0c;包括 SolidWorks、AutoCAD、Rhinoceros、Fusion 360 等…