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 进行渲染…...

label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
利用ngx_stream_return_module构建简易 TCP/UDP 响应网关
一、模块概述 ngx_stream_return_module 提供了一个极简的指令: return <value>;在收到客户端连接后,立即将 <value> 写回并关闭连接。<value> 支持内嵌文本和内置变量(如 $time_iso8601、$remote_addr 等)&a…...

css实现圆环展示百分比,根据值动态展示所占比例
代码如下 <view class""><view class"circle-chart"><view v-if"!!num" class"pie-item" :style"{background: conic-gradient(var(--one-color) 0%,#E9E6F1 ${num}%),}"></view><view v-else …...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...

Cinnamon修改面板小工具图标
Cinnamon开始菜单-CSDN博客 设置模块都是做好的,比GNOME简单得多! 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
C++中string流知识详解和示例
一、概览与类体系 C 提供三种基于内存字符串的流,定义在 <sstream> 中: std::istringstream:输入流,从已有字符串中读取并解析。std::ostringstream:输出流,向内部缓冲区写入内容,最终取…...

逻辑回归暴力训练预测金融欺诈
简述 「使用逻辑回归暴力预测金融欺诈,并不断增加特征维度持续测试」的做法,体现了一种逐步建模与迭代验证的实验思路,在金融欺诈检测中非常有价值,本文作为一篇回顾性记录了早年间公司给某行做反欺诈预测用到的技术和思路。百度…...

【无标题】湖北理元理律师事务所:债务优化中的生活保障与法律平衡之道
文/法律实务观察组 在债务重组领域,专业机构的核心价值不仅在于减轻债务数字,更在于帮助债务人在履行义务的同时维持基本生活尊严。湖北理元理律师事务所的服务实践表明,合法债务优化需同步实现三重平衡: 法律刚性(债…...