JAVA中的垃圾回收

news2024/10/3 2:26:13

JVM规范说了并不需要必须回收方法区,不具有普遍性,永久代使用的是JVM之外的内存

引用计数:效率要比可达性分析要强,随时发现,随时回收,实现简单,但是可能存在内存泄漏

局部变量表,静态引用变量

就是只是进行新生代回收的时候老年代的引用也可以作为GCROOTS

public class Test {
    public static Test obj;//这是一个类变量

//    @Override
//    protected void finalize() throws Throwable {
//        System.out.println("调用当前链上的finalize方法");
//        obj=this;//当前带回收的对象在finalize方法上和一个引用链上面的对象建立了联系
//    }

    public static void main(String[] args) throws InterruptedException {
        obj=new Test();
        //对象第一次拯救自己
        obj=null;
        System.gc();//调用垃圾回收器
        System.out.println("第一次GC");
        //因为finalizer线程优先级很低,暂停2s来等待他
        Thread.sleep(3000);
        if(obj==null){
            System.out.println("对象已经死了");
        }else{
            System.out.println("对象还活着");
        }
        obj=null;
        System.gc();//调用垃圾回收器
        System.out.println("第二次GC");
        //因为finalizer线程优先级很低,暂停2s来等待他
        Thread.sleep(3000);
        if(obj==null){
            System.out.println("对象已经死了");
        }else{
            System.out.println("对象还活着");
        }
    }
}
垃圾回收算法:

标记是非垃圾的对象就是可达的对象,然后清除清楚的是垃圾对象,要先递归进行遍历所有可达对象,然后清除的时候需要再开始遍历一遍,还需要进行维护空闲列表

就比如说我们的硬盘,只要你不小心点击了格式化,此时也不是真正的进行格式化,只是标记性删除,但是千万不要再向里面存放数据,因为数据会覆盖,就不好恢复了

复制算法:内存利用率贼低

首先经过可达性分析在A区找到可达的对象,一旦找到了可达的对象就不需要进行标记,直接将可达的对象进行复制算法放到另一块区域B,这是另一块空间的所有区域B的对象都是连续的

缺点:维护引用和对象的地址映射

回收的对象比较少,存活的对象比较多,那么移动的对象比较多,但是还要大量维护指针和对象的关系,老年代不适合使用复制算法,因为很多对象都不死,老年代复制对象开销太大

标记整理算法:

还要移动位置,还要修改引用对象关系很麻烦,这个算法比标记清除算法效率还低

分代回收:

新生代:老年代=1:2,edin区:幸存者1区:幸存者2区:

标记的开销和存活的对象成正比,因为标记只能标记存活的对象

清除阶段要进行全堆空间线性的遍历

压缩或者是整理和存活对象的大小成正比

stop the world停止的是用户线程,就是为保证一致性

可达性分析算法中枚举根节点会导致所有Java执行线程停顿

衡量一个垃圾回收器的标准就是吞吐量和低延迟

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

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

相关文章

Radius OTP实现VPN登录认证 安当加密

实现Radius OTP认证来完成VPN登录,需要使用支持Radius协议的VPN设备和客户端,以及一个Radius服务器来处理用户认证。 安当ASP身份认证平台作为一个企业通用的身份认证系统,集成了Radius认证功能,可满足所有支持radius认证的设备登…

【string题解 C++】字符串相乘 | 翻转字符串III:翻转单词

字符串相乘 题面 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。 注意:不能使用任何内置的 BigIn…

基本微信小程序的电影票务系统-电影票预订系统

项目介绍 在传统的模式下,电影购票需要到当地的影院进行线下购票,既浪费时间,又消耗人力。线上购票可以满足消费者查看电影信息及购买电影票的需求,在一定程度上降低经济和时间成本[9]。目前已有一些手机app可以线上购票&#xf…

优化|优化处理可再生希尔伯特核空间的非参数回归中的协变量偏移

原文:Optimally tackling covariate shift in RKHS-based nonparametric regression. The Annals of Statistics, 51(2), pp.738-761, 2023.​ 原文作者:Cong Ma, Reese Pathak, Martin J. Wainwright​ 论文解读者:赵进 编者按: …

无名管道和有名管道

进程间通信的几种方式 无名管道(pipe) 无名管道(Unnamed Pipe)是一种在进程间进行单向通信的机制。它可以用于父进程与子进程之间的通信,或者同一父进程中不同子进程之间的通信。无名管道是一种特殊的文件&#xff0…

【(数据结构) —— 顺序表的应用-通讯录的实现】

(数据结构)—— 顺序表的应用-通讯录的实现 一.通讯录的功能介绍1.基于动态顺序表实现通讯录(1). 功能要求(2).重要思考 二. 通讯录的代码实现1.通讯录的底层结构(顺序表)(1)思路展示(2)底层代码实现(顺序表) 2.通讯录上层代码实现(通讯录结构…

IEDA 自动生成类注释和方法注释

1. 新建类,自动生成类注释的模板配置 File->Settings->Editor->File and Code Templates->Class /*** Description: TODO* Author: LT* Date: ${YEAR}-${MONTH}-${DAY}* Version:V3.5.6*/2. 通过快捷键,添加类注释和方法注释的模板设置 类…

六轴传感器 SH3001

SH3001简介 SH3001是Senodia公司生产的一款六轴姿态传感器,可测量芯片自身X、Y、Z轴的加速度以及角速度参数,通过姿态融合,进而得到姿态角。 三轴加速度计(Accelerometer):测量X、Y、Z轴的加速度。 三轴陀…

C++基础入门详解(一)

文章目录 前言命名空间展开命名空间使用C官方命名空间中的输入输出IO流输入输出的使用方法 缺省参数半缺省 函数重载 “你总以为机会无限,所以不珍惜眼前人” 前言 提到C,大部分人都想到的是复杂的语法和大量的规则,相对于java和python等语言…

基于YOLOv8模型的绵羊目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要:基于YOLOv8模型的绵羊目标检测系统可用于日常生活中检测与定位车辆目标,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算法训练数据集…

基于simulink的单相光伏系统并网储能控制仿真

本仿真涉及到:基于电导增量法的最佳功率点跟踪算法、蓄电池恒流_恒压充电算法、光伏逆变器并网算法、双向(同步)DCDC电路设计等知识。 辐照度变化曲线: 模拟仿真,低辐照度情况,蓄电池与光伏逆变器共同向…

软件项目管理实践指南:有效规划、执行和控制

软件项目管理是使软件产品、应用程序和系统成功交付的重要规程。它有助于确保软件在预算内按时开发,同时满足客户的质量和功能需求。 软件项目管理是管理软件项目生命周期的一种有组织的方法,包括计划、开发、发布、维护和支持。它是在满足客户需求的同时…

python:绘制回归预测结果真实值和预测值之间的散点密度图

作者:CSDN @ _养乐多_ 对博客《python:使用卷积神经网络(CNN)进行回归预测》中的,回归预测结果真实值和预测值之间的散点密度图升级了一下。 如下图所示, 文章目录 一、完整代码二、参考一、完整代码 def plot(y_test, y_test_predict, method):d

SAP MM学习笔记34 - 请求书照合中的支付保留(发票冻结)

上次学习了 请求书照合中 如何修改 带勘定设定Category的发票,并举了 K:原价Center 的例子。 SAP MM学习笔记33 - 请求书照合中修改 带勘定设定Category(科目分配)的发票_东京老树根的博客-CSDN博客 日月如梭,倏忽之间…

JMeter性能测试,完整入门篇

1. Jmeter简介 Apache JMeter是一款纯java编写负载功能测试和性能测试开源工具软件。相比Loadrunner而言,JMeter小巧轻便且免费,逐渐成为了主流的性能测试工具,是每个测试人员都必须要掌握的工具之一。 本文为JMeter性能测试完整入门篇&…

【【萌新的SOC学习之AXI DMA环路测试介绍】】

萌新的SOC学习之AXI DMA环路测试介绍 AXI DMA环路测试 DMA(Direct Memory Access,直接存储器访问)是计算机科学中的一种内存访问技术。它允许某些计算机内部的硬件子系统可以独立地直接读写系统内存,而不需中央处理器(CPU)介入处…

【atoi函数详解】

文章目录 一. 什么是atoi函数二. 模拟实现函数atoi三. 总结atoi 一. 什么是atoi函数 atoi函数是将常量字符串转化为整数 int atoi(const char str);* 注意:该函数的返回值为int,所以不能超过int范围,如果数字很大超过就会截断,返…

手搭手Mybatis-Plus数据迁移至TDSQL

环境介绍 技术栈 springbootmybatis-plusdruidbaomidoumysqloracle 软件 版本 mysql 8 IDEA IntelliJ IDEA 2022.2.1 JDK 1.8 Spring Boot 2.7.13 mybatis 2.3.1 Navicat测试连接TDSQL 开启访问外网 IDEA环境搭建 pom.xml所需依赖 <dependencies><dep…

计算机毕业设计选什么题目好?springboot 试题库管理系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

element ui el-table表格复选框,弹框关闭取消打勾选择

//弹框表格复选框清空 this.$nextTick(()>{this.$refs.table.clearSelection();})<el-table ref"table" v-loading"crud.loading" :header-cell-style"{ color: #FFF, background: #333 }":cell-style"{ color: #FFF, background: #3…