当前位置: 首页 > news >正文

JVM垃圾回收机制GC

一句话介绍GC: 自动释放不再使用的内存 

一、判断对象是否能回收

思路一:引用计数

给这个对象里安排一个计数器, 每次有引用指向它, 就把计数器+1, 每次引用被销毁,计数器-1,当计数器为0的时候, 意味着该对象就是垃圾了

但引用计数存在两个缺陷:

1. 空间利用率比较低,浪费更多的内存空间

        给引用技术分配了两个字节, 对象本体才4个字节, 引用计数就浪费了50%的空间

        如果代码中都是这种小对象, 并且数量众多, 此时, 浪费就非常明显了

2. 可能存在循环引用的问题, 导致对象不能被正确识别为垃圾

思路二:可达性分析

JVM首先会从现有代码中的能直接访问到的引用出发, 尝试遍历所有能访问的对象,只要对象能访问到,就会标记成”可达“,完成整个遍历之后,可达之外的对象,也就是“不可达”,也就相当于垃圾了

总结: 可达性分析浪费时间, 引用计数浪费空间



二、如何清理垃圾?

1、标记清除

但会导致释放的空间是离散的, 引起“内存碎片

申请内存的时候, 都是申请连续的内存空间。 直接释放内存会破坏原有的连续性,导致还有剩余但是申请不了

2、复制算法

复制算法: 通过冗余的内存空间, 把有效对象复制到另一部分空间,来避免内存碎片

但是浪费一半空间

把一个内存,分成两份,用FROM清理FROM,搬到TO, 往复进行

把左侧区域中,有效的对象, 复制到右侧

接下来就可以使用右侧区域了, 用了一段时间后,也会有很多对象,也是同理,把有效对象复制会左边,对右侧进行统一释放

3、标记整理

把有效对象搬到一起, 统一删除元素, 当然这样搬运元素成本也比较高导致速度太慢

4.分代回收

其实上边三个方法都不行,于是大佬们设计了一个综合方案

java代码中,对象主要分成两类:

        1.生命周期特别特别短

        2.生命周期特别特别长

GC是周期性的扫描,一个对象每经过一轮GC,就长一岁

分代回收就是按照对象的年龄,来制定不同的回收策略

首先,整个堆分成两部分: 新生代 老年代

新生代又分伊甸区 幸存区

①新创建的对象全部会放在新生代中的伊甸区, 再经历一轮GC后,剩余的还没挂的对象会通过复制算法,复制到幸存区 (幸存一轮后年龄+1)

②幸存区由两块区域组成, 每次只使用一块;对已使用区域使用复制算法转移至未使用区域(注意箭头指向

③如果一个对象在幸存区中经过15轮都没挂 那就是生命周期特别长了,直接转移到老年代,在老年代中使用标记整理

老年代扫描频率比新生代低得多,并且即使扫描了大多数也不会被销毁,因此标记整理开销不大

新生代扫描频率虽然高,但是每轮留下的对象很少,复制算法的开销也不大

垃圾回收总结:

三、垃圾回收器

相关文章:

JVM垃圾回收机制GC

一句话介绍GC: 自动释放不再使用的内存 一、判断对象是否能回收 思路一:引用计数 给这个对象里安排一个计数器, 每次有引用指向它, 就把计数器1, 每次引用被销毁,计数器-1,当计数器为0的时候…...

详解JAVA中的@ApiModel和@ApiModelProperty注解

目录 前言1. ApiModel注解2. ApiModelProperty注解3. 实战 前言 在Java中,ApiModel和ApiModelProperty是Swagger框架(用于API文档的工具)提供的注解,用于增强API文档的生成和展示。这两者搭配使用更佳 使用两者注解,…...

TiDB专题---2、TiDB整体架构和应用场景

上个章节我们讲解了TiDB的发展和特性,这节我们讲下TiDB具体的架构和应用场景。首先我们回顾下TiDB的优势。 TiDB的优势 与传统的单机数据库相比,TiDB 具有以下优势: 纯分布式架构,拥有良好的扩展性,支持弹性的扩缩容…...

性能调优入门

从公众号转载,关注微信公众号掌握更多技术动态 --------------------------------------------------------------- 一、性能定律和数理基础 1.三个定律法则 (1)帕累托法则 我它也被称为 80/20 法则、关键少数法则,或者八二法则。人们在生活中发现很多…...

JavaWeb | 验证码 、 文件的“上传”与“下载”

目录: 验证码 和 文件的“上传”与“下载”1.验证码1.1在JSP上开发验证码 2.“文件上传” 和 “文件下载”2.1“文件上传 ”2.2“文件下载” 验证码 和 文件的“上传”与“下载” 1.验证码 验证码:就是由服务器生成的一串随机数字或符号形成一幅图片&am…...

服务器感染了.halo勒索病毒,如何确保数据文件完整恢复?

导言: 随着科技的不断发展,网络安全问题日益突出,而.halo勒索病毒正是这个数字时代的一大威胁。本文将深入介绍.halo勒索病毒的特点,解释在受到攻击后如何有效恢复被加密的数据文件,并提供一些建议以预防未来可能的威…...

docker安装elasticsearch8.5.0和kibana

服务器环境,centos7 一、安装elasticsearch 1. 创建一个es和kibana通用的网络 docker network create es-net 2. 拉取es镜像,这里选择8.5.0版本 docker pull elasticsearch:8.5.03. 创建挂载目录,并授权 mkdir /usr/local/install/ela…...

如何使用内网穿透工具实现公网访问GeoServe Web管理界面

文章目录 前言1.安装GeoServer2. windows 安装 cpolar3. 创建公网访问地址4. 公网访问Geo Servcer服务5. 固定公网HTTP地址6. 结语 前言 GeoServer是OGC Web服务器规范的J2EE实现,利用GeoServer可以方便地发布地图数据,允许用户对要素数据进行更新、删除…...

koa2项目中封装log4js日志输出

1.日志输出到控制台 npm i log4js -D 封装log4js文件: 注意:每次都要重新获取log4js.getLogger(debug)级别才能生效 const log4js require("log4js");const levels {trace: log4js.levels.TRACE,debug: log4js.levels.DEBUG,info: log4js.…...

C# WPF上位机开发(抽奖软件)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 每到年末或者是尾牙的时候,很多公司都会办一些年终的清楚活动,感谢员工过去一年辛苦的付出。这个时候,作为年会…...

搭建部署Hadoop2.x和3.x的区别

文章目录 2.x 和 3.x 的区别Java最小支持版本常用的端口号配置文件Classpath隔离NodeManager重连 进入官网自行查阅 2.x 和 3.x 的区别 Java最小支持版本 Hadoop 2.x:2.7 版本需要 Java 7,2.6 以及更早期版本支持 Java 6Hadoop 3.x:最低要求…...

Java爬虫攻略:应对JavaScript登录表单

问题背景 在进行网络抓取数据时,经常会遇到需要登录的网站,特别是使用JavaScript动态生成登录表单的情况。传统的爬虫工具可能无法直接处理这种情况,因此需要一种能够模拟用户行为登录的情况解决方案。 在实际项目中,我们可能需要…...

基于单片机的电子密码锁设计

1.设计任务 利用AT89C51单片机为核心控制元件,设计一个简易的电子密码锁,可设置四位密码,输入错误三次,报警灯亮起(红灯亮起),输入正确,绿灯闪烁三次。可通过LCD显示屏查看密码&…...

ChatGPT学习笔记

1 ChatGPT架构图 (ChatGPT_Diagram.svg来自于【OpenA | Introducing ChatGPT】) 2 模型训练 ChatGPT在训练时使用了PPO方法;...

One-to-Few Label Assignment for End-to-End Dense Detection阅读笔记

One-to-Few Label Assignment for End-to-End Dense Detection阅读笔记 Abstract 一对一(o2o)标签分配对基于变换器的端到端检测起着关键作用,最近已经被引入到全卷积检测器中,用于端到端密集检测。然而,o2o可能因为…...

Ubuntu22.04 使用Docker部署Neo4j出错 Exited(70)

项目场景: 最近需要使用Neo4j图数据库,因此打算使用docker部署 环境使用WSL Ubuntu22.04 问题描述 拉下最新Neo4j镜像,执行命令部署 启动容器脚本 docker run -d -p 7474:7474 -p 7687:7687 \ --name neo4j \ --env "NEO4J_AUTHneo…...

【数据分析 | Numpy】Numpy模块系列指南(一),从设计架构说起

🤵‍♂️ 个人主页: AI_magician 📡主页地址: 作者简介:CSDN内容合伙人,全栈领域优质创作者。 👨‍💻景愿:旨在于能和更多的热爱计算机的伙伴一起成长!!&…...

多人聊天室

多人聊天包 由于要先创建服务面板,接收客户端连接的信息,此代码使用顺序为先启动服务端,在启动客户端,服务端不用关,不然会报错。多运行几次客户端,实现单人聊天 1.创建服务面板 package yiduiy;import j…...

智慧园区可视化综合管理平台建设方案,智能化、数字化才是关键

园区作为城市的基本单元,是经济发展的重要载体。随着我国经济的快速发展,各类工业园区、办公园区等园区的规划建设也越来越多。伴随着互联网新兴技术的发展和应用,智慧园区已成为当今城市规划和社会发展的关注焦点,今天我们来介绍…...

kepler.gl部署在线说明文档

1 概述 1.1 介绍 1、Kepler.gl 是一个强大的开源地理空间分析工具,用于大规模数据集的可视化。它由 Uber 的数据可视化团队开发,并且是基于 Web 技术构建的。Kepler.gl 涉及到以下几个主要技术领域: WebGL: Kepler.gl 通过 WebGL 进行渲染…...

MedGemma-X智能助手实测:像住院总医师一样分析X光片

MedGemma-X智能助手实测:像住院总医师一样分析X光片 1. 重新定义影像诊断:从工具到助手 在放射科的日常工作中,我们习惯了与各种CAD(计算机辅助诊断)系统打交道。它们像精确但沉默的尺子,能在图像上标出可…...

从黑客攻防角度看网络命令:如何用ping/tracert/nslookup发现网络安全隐患

网络命令的攻防实战:用基础工具发现隐藏的安全威胁 当大多数人还在把ping、tracert这些基础网络命令当作简单的连通性测试工具时,安全工程师已经将它们变成了发现网络威胁的"显微镜"。这些看似简单的命令行工具,在专业的安全分析场…...

THE LEATHER ARCHIVE快速体验:一键生成杂志级AI皮衣大片,小白也能当设计师

THE LEATHER ARCHIVE快速体验:一键生成杂志级AI皮衣大片,小白也能当设计师 1. 项目介绍与核心价值 想象一下,你不需要专业的设计技能,就能创造出媲美时尚杂志封面的皮衣设计作品。THE LEATHER ARCHIVE正是这样一个让创意触手可及…...

XposedRimetHelper:如何优雅解决远程办公的定位打卡难题?[特殊字符]

XposedRimetHelper:如何优雅解决远程办公的定位打卡难题?🚀 【免费下载链接】XposedRimetHelper Xposed 钉钉辅助模块,暂时实现模拟位置。 项目地址: https://gitcode.com/gh_mirrors/xp/XposedRimetHelper 面对企业日益严…...

Linux系统CPU负载与使用率详解及性能监控

1. CPU负载与CPU使用率的本质区别在Linux系统监控和性能调优过程中,CPU负载和CPU使用率这两个指标经常被混淆使用。作为系统管理员,我曾多次遇到团队成员将这两个概念混为一谈的情况,这往往导致对系统性能问题的误判。让我们先从一个实际案例…...

Guohua Diffusion 创意编程:用Processing可视化交互控制图像生成

Guohua Diffusion 创意编程:用Processing可视化交互控制图像生成 你有没有想过,自己随手画的一条线、选择的一个颜色,能立刻变成一幅由AI生成的完整画作?这听起来像是科幻电影里的场景,但现在,通过一点创意…...

不会画画也能创作!梦幻动漫魔法工坊新手入门全攻略

不会画画也能创作!梦幻动漫魔法工坊新手入门全攻略 1. 为什么你需要这个工具 你是否曾经有过这样的经历:脑海中浮现出一个绝妙的动漫角色形象,却因为不会画画而无法将它呈现出来?或者想为社交媒体创作独特的二次元头像&#xff…...

告别CTex!TeX Live+Texstudio组合安装避坑指南(Windows/Mac双平台)

告别CTex!TeX LiveTexstudio组合安装避坑指南(Windows/Mac双平台) 如果你曾经使用过CTex套装,可能会被其"开箱即用"的便利性所吸引。但当你需要跨平台协作或追求更灵活的定制时,TeX LiveTexstudio的组合无疑…...

S2-Pro数据库课程设计助手:从需求分析到SQL生成的全程辅助

S2-Pro数据库课程设计助手:从需求分析到SQL生成的全程辅助 1. 课程设计的痛点与解决方案 每到学期末,数据库课程设计就成了计算机专业学生的"必修课"。面对一个陌生的业务场景,从零开始梳理需求、设计E-R图、编写SQL语句&#xf…...

OpenClaw数据安全:Qwen3.5-4B-Claude本地处理敏感合同

OpenClaw数据安全:Qwen3.5-4B-Claude本地处理敏感合同 1. 为什么法律行业需要本地化AI处理 去年我参与了一个法律科技项目,团队最初尝试用公有云API处理合同文本时,遭遇了客户对数据出海的强烈抵触。某次演示中,当法务总监看到合…...