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

JVM中释放内存的三种方法

判断是否需要垃圾回收可以采用分析。

1标记--清除算法

分为两个阶段,标记和清除,先利用可达性分型标记还存活的对象,之后将没有被标记的对象删除,这样容易生成空间碎片,而且效率不稳定

  1. 标记阶段:
    标记阶段与可达性分析算法类似,通过从根对象开始遍历对象引用链,标记所有被访问到的对象为存活对象。标记完成后,所有存活对象被标记为"已存活"。

  2. 清除阶段:
    清除阶段是标记-清除算法的特有步骤。在该阶段,算法扫描整个堆内存,找到未被标记的对象,并进行清除操作。清除的对象被认定为垃圾对象,即可以被垃圾回收器回收内存。

清除操作有两种常见的方式:

  • 逐个清除:对于每个未被标记的对象,将其从内存中移除,并释放其占用的内存空间。
  • 延迟清除:将所有未被标记的对象的内存空间标记为可用,而不立即释放。可以在需要申请新内存时,直接将可用空间分配给新对象,避免频繁的内存分配和释放操作。

速 度 较 快

会 造 成 内 存 碎 片

 2.标记整理算法

  1. 标记阶段:
    标记阶段与可达性分析算法类似,通过从根对象开始遍历对象引用链,标记所有被访问到的对象为存活对象。标记完成后,所有存活对象被标记为"已存活"。

  2. 整理阶段:
    整理阶段是标记-整理算法的特有步骤。在该阶段,算法将所有存活对象移到内存的一端,然后对非存活对象所占用的空间进行回收,使之成为可用的内存空间。

整理阶段分为两个步骤:

  • 从内存的起始位置开始,依次遍历所有存活对象,并将其按顺序移动到内存的另一端。移动过程中,保持对象之间的引用关系不变,即更新引用指向新的位置。
  • 在移动完所有存活对象后,释放剩余的内存空间,使之变为可用的内存。

通过标记-整理算法,内存中只保留了存活对象,并且实现了内存的紧凑布局,使得存活对象在内存中连续存放。相比于标记-复制算法,标记-整理算法没有额外的空间浪费,适用于老年代等内存较大的场景。

避免内存碎片的产生,第一阶段也是标记对象,和标记清除的区别在于第二阶段的整理,它是将存活的对象移动到头部

速 度 慢

没 有 内 存 碎 片

3.标记复制法

  1. 标记阶段:
    标记阶段与可达性分析算法类似,通过从根对象开始遍历对象引用链,标记所有被访问到的对象为存活对象。标记完成后,所有存活对象被标记为"已存活"。

  2. 复制阶段:
    复制阶段是标记-复制算法的特有步骤。在该阶段,算法将内存空间划分为两个相等大小的区域,通常称为"From空间"和"To空间"。初始时,所有存活对象位于From空间。

复制阶段分为两个步骤:

  • 从From空间开始,对已标记的存活对象进行复制到To空间。复制过程中,保持对象之间的引用关系不变,即更新引用指向新的位置。复制完成后,From空间中的所有对象都是垃圾。
  • 将From空间与To空间进行交换,使To空间成为新的From空间,原From空间成为新的To空间,此时完成了垃圾回收。

通过标记-复制算法,内存中只保留了存活对象,将垃圾对象全部清理,并且实现了内存的紧凑布局,使得存活对象在内存中连续存放,提高了内存访问的性能。

不 会 有 内 存 碎 片

需 要 占 用 双 倍 内 存 空 间

 

相关文章:

JVM中释放内存的三种方法

判断是否需要垃圾回收可以采用分析。 1标记--清除算法 分为两个阶段,标记和清除,先利用可达性分型标记还存活的对象,之后将没有被标记的对象删除,这样容易生成空间碎片,而且效率不稳定 标记阶段: 标记阶段…...

图床项目进度(一)——UI首页

1. 前言 前面我不是说了要做一个图床吗,现在在做ui。 我vue水平不够高,大部分参考b站项目照猫画虎。 vue实战后台 我使用ts,vite,vue3进行了重构。 当然,我对这些理解并不深刻,许多代码都是游离于表面&am…...

vue3父子组件相互调用方法详解

vue3父子组件相互调用方法详解 1、前言2、父组件调用子组件方法2.1 子组件Child.vue2.2 父组件Father.vue 3、子组件调用父组件方法3.1 父组件Father.vue3.2 子组件Child.vue 1、前言 在vue3项目开发中,我们常常会遇到父子组件相互调用的场景,下面以set…...

Java之接口

作者简介: zoro-1,目前大一,正在学习Java,数据结构等 作者主页: zoro-1的主页 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 Java之接口 接口的概念语法规则接口特性接口使用案…...

QT学习笔记-QT5.15编译及安装谷歌拼音输入法(QtInputMethod_GooglePinyin)

QT学习笔记-QT5.15编译及安装谷歌拼音输入法(QtInputMethod_GooglePinyin) 0、背景1、环境2、下载QtInputMethod_GooglePinyin源码3、使用MinGW64构建套件编译3.1 编译QtInputMethod_GooglePinyin源码3.2、部署tgtsmlInputContextPlugin输入法插件3.3、运…...

python 使用 pdf2image 库将PDF转换为图片

在 Ubuntu 上实现网络穿透:手把手教你搭建FRPS服务器 初环境步骤一:安装pdf2image库步骤二:导入必要的库步骤三:指定PDF文件路径步骤四:将PDF转换为图片步骤五:保存图像为图片文件完整代码运行结果 在数字化…...

kubernetes(namespace、pod、deployment、service、ingress)

NameSpace NameSpace名称空间 用来隔离资源,但是不隔离网络 使用命令行: kubectl create ns hello #创建 kubectl delete ns hello #删除 kubectl get ns #查看使用配置文件: vi hello.yamlapiVersion: v1 kind: Namespace metadata:name…...

深度学习loss变为nan的问题

在网上查了一些资料,但是这个情况和网上都不太一样。前100epoch能正常训练,loss缓慢下降,精度缓慢增大,但是突然loss就Nan了,我想应该不是样本问题也不是梯度爆炸或者loss中有除0吧,毕竟都训练了100epoch了…...

音视频 ffplay命令-主要选项

选项说明-x width强制显示宽带-y height强制显示高度-video_size size帧尺寸 设置显示帧存储(WxH格式),仅适用于类似原始YUV等没有包含帧大小(WxH)的视频-pixel_format format格式设置像素格式-fs以全屏模式启动-an禁用音频(不播放声音)-vn禁…...

深入浅出Pytorch函数——torch.nn.init.dirac_

分类目录:《深入浅出Pytorch函数》总目录 相关文章: 深入浅出Pytorch函数——torch.nn.init.calculate_gain 深入浅出Pytorch函数——torch.nn.init.uniform_ 深入浅出Pytorch函数——torch.nn.init.normal_ 深入浅出Pytorch函数——torch.nn.init.c…...

[Go版]算法通关村第十三关青铜——数字数学问题之统计问题、溢出问题、进制问题

这里写自定义目录标题 数字统计专题题目:数组元素积的符号思路分析:无需真计算,只需判断负数个数是奇是偶复杂度:时间复杂度 O ( n ) O(n) O(n)、空间复杂度 O ( 1 ) O(1) O(1)Go代码 题目:阶乘尾数0的个数思路分析&am…...

GPT-4一纸重洗:从97.6%降至2.4%的巨大挑战

斯坦福大学和加州大学伯克利分校合作进行的一项 “How Is ChatGPTs Behavior Changing Over Time?” 研究表明,随着时间的推移,GPT-4 的响应能力非但没有提高,反而随着语言模型的进一步更新而变得更糟糕。 研究小组评估了 2023 年 3 月和 20…...

大数据Flink学习圣经:一本书实现大数据Flink自由

学习目标:三栖合一架构师 本文是《大数据Flink学习圣经》 V1版本,是 《尼恩 大数据 面试宝典》姊妹篇。 这里特别说明一下:《尼恩 大数据 面试宝典》5个专题 PDF 自首次发布以来, 已经汇集了 好几百题,大量的大厂面试…...

什么是微服务?

2.微服务的优缺点 优点 单一职责原则每个服务足够内聚,足够小,代码容易理解,这样能聚焦一个指定的业务功能或业务需求;开发简单,开发效率提高,一个服务可能就是专一的只干一件事;微服务能够被小…...

【C++入门到精通】C++入门 —— 容器适配器、stack和queue(STL)

阅读导航 前言stack1. stack概念2. stack特点3. stack使用 queue1. queue概念2. queue特点3. queue使用 容器适配器1. 什么是适配器2. STL标准库中stack和queue的底层结构3. STL标准库中对于stack和queue的模拟实现⭕stack的模拟实现⭕stack的模拟实现 总结温馨提示 前言 文章…...

系统架构设计专业技能 · 软件工程之需求工程

系列文章目录 系统架构设计高级技能 软件架构概念、架构风格、ABSD、架构复用、DSSA(一)【系统架构设计师】 系统架构设计高级技能 系统质量属性与架构评估(二)【系统架构设计师】 系统架构设计高级技能 软件可靠性分析与设计…...

2023国赛数学建模E题思路模型代码 高教社杯

本次比赛我们将会全程更新思路模型及代码,大家查看文末名片获取 之前国赛相关的资料和助攻可以查看 2022数学建模国赛C题思路分析_2022国赛c题matlab_UST数模社_的博客-CSDN博客 2022国赛数学建模A题B题C题D题资料思路汇总 高教社杯_2022国赛c题matlab_UST数模社…...

Baumer工业相机堡盟工业相机如何通过BGAPISDK设置相机的Bufferlist序列(C++)

Baumer工业相机堡盟工业相机如何通过BGAPISDK设置相机的Bufferlist序列(C) Baumer工业相机Baumer工业相机的Bufferlist序列功能的技术背景CameraExplorer如何查看相机Bufferlist功能在BGAPI SDK里通过函数设置相机Bufferlist参数 Baumer工业相机通过BGAP…...

从 Ansible Galaxy 使用角色

从 Ansible Galaxy 使用角色 根据下列要求,创建一个名为 /home/curtis/ansible/roles.yml 的 playbook : playbook 中包含一个 play, 该 play 在 balancers 主机组中的主机上运行并将使用 balancer 角色。 此角色配置一项服务,以…...

ROS与STM32通信(二)-pyserial

文章目录 下位机上位机自定义msg消息发布订阅 ROS与STM32通信一般分为两种, STM32上运行ros节点实现通信使用普通的串口库进行通信,然后以话题方式发布 第一种方式具体实现过程可参考上篇文章ROS与STM32通信-rosserial,上述文章中的收发频率…...

[oneAPI] 使用Bert进行中文文本分类

[oneAPI] 使用Bert进行中文文本分类 Intel Optimization for PyTorch基于BERT的文本分类模型数据预处理数据集定义tokenize建立词表转换为Token序列padding处理与mask 模型 结果OneAPI参考资料 比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517…...

【数据治理】什么是数据库归档

文章目录 前言什么是数据归档 前言 如果您的日常工作中需要对数据库进行管理,那您肯定已经或即将遭遇这样的困惑:随着业务的蓬勃发展,数据库文件的大小逐渐增大,您需要为在线业务提供越来越大的高性能磁盘容量,但数据…...

AI代码补全 案例 - 阿里云智能编码插件Cosy

文章目录 Cosy简介Cosy安装Marketplace安装【推荐】离线安装安装效果Cosy功能体验代码智能补全代码示例搜索API搜索自然语言搜索控制台异常搜索优质文档搜索Cosy体验有感参考Cosy简介 阿里云智能编码插件(Alibaba Cloud AI Coding Assistant)是一款AI编程助手,提供代码智能…...

【Linux】进程信号篇Ⅰ:信号的产生(signal、kill、raise、abort、alarm)、信号的保存(core dump)

文章目录 一、 signal 函数:用户自定义捕捉信号二、信号的产生1. 通过中断按键产生信号2. 调用系统函数向进程发信号2.1 kill 函数:给任意进程发送任意信号2.2 raise 函数:给调用进程发送任意信号2.3 abort 函数:给调用进程发送 6…...

漏洞指北-VulFocus靶场专栏-中级03

漏洞指北-VulFocus靶场专栏-初级03 中级009 🌸gxlcms-cve_2018_14685🌸step1:安装系统 密码rootstep2 进入后台页面 账号密码:admin amdin888step3 查看详细 有phpinfo() 中级010 🌸dedecms-cnvd_2018_01221&#x1f3…...

【leetcode 力扣刷题】数组交集(数组、set、map都可实现哈希表)

数组交集 349. 两个数组的交集排序+双指针数组实现哈希表unordered_setunordered_map 350. 两个数组的交集Ⅱ排序 双指针数组实现哈希表unordered_map 349. 两个数组的交集 题目链接:349. 两个数组的交集 题目内容如下,理解题意&#xff1a…...

MySQL 8.0.31 登录提示caching_sha2_password问题解决方法

MySQL 8.0.31 登录提示caching_sha2_password问题解决方法 MySQL 8.0.31 使用了 caching_sha2_password 作为默认的身份验证插件,这可能导致一些旧的客户端和库无法连接到服务器。以下是一些解决此类问题的常见步骤和建议: 确保MySQL服务正在运行&#…...

[Google] DeepMind Gemini: 新一代LLM结合AlphaGo技术将力压 GPT-4|未来 AI 领域的新巨头

2016年,Google DeepMind 人工智能实验室孕育出的 AlphaGo 人工智能程序在围棋赛场上一举击败冠军选手,成为历史的见证者。如今,DeepMind 联合创始人兼首席执行官 Demis Hassabis 表示,他们的工程师正借鉴 AlphaGo 的技术研发一款名…...

Maven高级

目录 一、分模块开发与设计 1. 分模块开发的意义 2. 分模块开发(模块拆分) (1)创建Maven模块 (2)书写模块代码 (3)通过maven指令安装模块到本地仓库(install指令&…...

【视觉SLAM入门】5.2. 2D-3D PNP 3D-3D ICP BA非线性优化方法 数学方法SVD DLT

"养气之学,戒之躁急" 1. 3D-2D PNP1.1 代数法1.1.1 DLT(直接线性变换法)1.1.2. P3P 1.2 优化法BA (Bundle Adjustment)法 2. 3D-3D ICP2.1 代数法2.1.1 SVD方法 2.2 优化(BA)法2.2.2 非线性优化方法 前置事项: 1. 3D-2D PNP 该问题描述为&am…...

网站建设预计费用/长尾词seo排名优化

一.str类型由 "" """ 阔起来的内容就是字符串字符串是不可变的数据类型,无论你执行任何操作,每次操作都会返回一个新的字符串索引从0开始,使用[]可以获取到每一个字符,还可以倒着数(str[])切片str[ : ]顾头不顾尾没有步长只能从左往右切步长为负数可以…...

怎么在网站做推广/网站加速器

Redis有自己的内存分配器,当key-value对象被移除时,Redis不会马上向操作系统释放其占用内存。redis之所以这样的设计有两个原因。 OS可能会将释放内存交换到虚拟内存,但OS的虚拟内存又是物理文件,其IO读写效率较低,从而…...

网站访问量什么意思/最近新闻事件

请问唐氏筛查低风险人群,有必要做无创DNA吗?唐氏筛查低风险,有必要做无创DNA检查吗?这个问题问的好,如果单纯性的唐氏筛查低风险,那么根本没有必要再做无创DNA检查了。现实生活中还是存在很多唐氏筛查低风险…...

品牌手机网站开发/seo服务收费

import matplotlib.pyplot as plt from PIL import Imageroot r"G:\01.jpg"plt.imshow(Image.open(root))ax plt.gca() # 默认框的颜色是黑色,第一个参数是左上角的点坐标 # 第二个参数是宽,第三个参数是长 ax.add_patch(plt.Rectangle((100…...

服装集团网站建设/网页制作的基本步骤

CSDN的博客简直是难用。。。 美观度也不够。。。 贴一份OC代码都可以累死。。。 语法高亮简直了。。。虽然看起来博客园也不支持matlab的%%但是强迫症难受啊。。。 然后想想。。。回博客园吧。。。 这里也有以前一点一点算法的足迹。。。 CSDN导博客也真是费劲啊,算…...

湖南住房和城乡建设厅网站/广告联盟自动挂机赚钱

当今,高速半导体技术(例如,RF- CMOS、GaN 和 SiGe)的发展正在将应用频率上限推得越来越高,一直达到微波和毫米波范围。随着新型商业市场应用的要求(例如,汽车雷达、超宽带通信链路和无线 LAN/PA…...