垃圾回收

告别SDK Manager刷写失败:手把手教你用命令行搞定Jetson Linux系统安装 本文详细介绍了如何通过命令行工具解决Jetson Linux系统刷写失败的问题,包括环境准备、刷写流程解析、常见错误处理及高级定制技巧。通过使用`nvsdkmanager_flash.sh`命令行工具,开发者可以更透明、可控地完成系统刷写,避免GUI工具常见的报错问题。 阅读详情

垃圾收集(Garbage Collection,GC)主要关注堆和方法区,回收满足回收条件的空间。

对象回收

对于堆上的对象实例,垃圾收集器在进行回收操作前,首先要判别实例对象是否被引用,准确的是判别对象是否“死亡”,因为有引用不代表不需要回收。判别对象时候被引用有2个算法:

  1. 引用计数法

给对象添加一个引用计数器,每当有一个地方引用它时,计数值就加1;当引用失效时就减1。任何时候如果计数器为0,就说明这个对象没有任何引用。

但是JAVA没有使用这种算法来判别对象的引用。这是因为要避免2个对象互相引用的情况。

A、B两个对象相互引用,但除此之外没有任何引用,从道理上来讲它们应该被回收,但是由于引用计数器不为0,无法回收。

  1. 根搜索算法

本算法通过一系列名为“GC Roots”的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链。当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。

JAVA中GC Roots一般有:

  • 栈帧中的本地变量表中引用的对象
  • 方法区中的类静态属性引用的对象
  • 方法区中常量引用的对象
  • 本地方法栈中JNI的引用对象

JDK 1.2后JAVA的引用开始分为强引用、软引用、弱引用、虚引用。这些在之前的文档中详细介绍过,这里就不再啰嗦啦。

当然,在根搜索算法中不可达的对象,也不是必定会被回收。宣告一个对象死亡至少要经历2次标记。

如果对象进行根搜索算法后发现没有与GC Roots的引用链,那它将会被第一次标记并进行一次筛选,筛选条件是该对象是否有必要执行finalize()方法。当对象没有覆盖finalize()方法或是finalize()方法已经被虚拟机调用过,虚拟机将这两种情况视为没有必要执行。

如果对象有必要执行finalize()方法,那么它将会被放置在一个名为F-Queue的队列中,并在稍后由一条由虚拟机自动建立的、低优先级的Finalizer线程去执行(虚拟机会触发这个方法,但并不承诺会等待它运行结束)。稍后会堆队列中的对象进行第二次标记,如果在这之前对象能够重新与引用链上的任意对象关联,那么它将拯救自己,否则就真的被标记为死亡了。当然标记为死亡也不代表就一定被回收……

JAVA虚拟机规范没有要求在方法区中实现垃圾收集,且在方法区中进行垃圾回收的性价比较低。

对于HotSpot来说,方法区中主要回收两部分:废弃常量和无用类。

垃圾回收算法

  1. 标记-清除算法

首先标记出所有需要回收的对象,在标记完成后统一回收掉所有被标记的对象。

缺点:

1)效率不高

2)空间问题,清除后碎块太多

  1. 复制算法

它将内存分为相同大小的2块,每次只使用其中一块,当一块内存用完时,就将存活的对象复制到另外一块上,并清空原数据块。

它对空间要求比较大,但是用于新生代的回收还是相当有效的,IBM研究表明,新生代中的对象有98%是朝生夕死的。

  1. 标记-整理算法

类似于标记-清除算法,但是它不会直接进行清除操作,而是将存活对象都向一端移动,然后清除掉端边界外的内存。

  1. 分代收集算法

根据内存的存活周期的不同将内存划为几块。一般把java堆分为新生代和老年代。由于新生代的对象每次回收都有大量的对象死去,所以用复制算法。对于老年代对象存活率高,可以采用标记-清除或是标记-整理算法。

垃圾收集器

HotSpot中有多个垃圾收集器,应对不同的情况。很多情况下垃圾收集器都需要组合使用。


JVM-垃圾回收 垃圾回收及其算法 阅读详情

相关推荐

智能工厂四大系统协同实战:ERP/PLM/MES/WMS集成架构与数据流解析

本文深入解析了智能工厂中ERP、PLM、MES、WMS四大核心系统的协同集成架构与数据流。通过实战案例,阐述了如何打通系统孤岛,实现从产品设计、资源计划、生产执行到仓储物流的数据无缝流转,从而构建高效、敏捷的智能工厂运营体系。

ujm567890的博客 676

内存分配与垃圾回收(二)

1. 对象内存布局一个对象本身的内存结构需要一种描述方式,这个描述信息(类描述)是以字节码的方式存储在方法区的,虚拟机使用对象头的元数据指针指向定位到当前对象的具体目标类型(类对象)。对象头的Mark word用于存储对象自身的运行时数据,如哈希码(HashCode)、GC 分代年龄、锁状态标志、线程持有的锁、偏向线程 ID、偏向时间戳、对象分代年龄。实例数据主要用于存储定义在当前对象中各种类型的...

gao__xue的博客 216

红外回充方案之红外接收和发射/附源码(1)

本文介绍了基于NEC协议的红外回充方案实现,重点讲解了红外收发原理和GD32F330单片机的接收端实现。文章首先说明采用38kHz载波和一体化红外接收管的设计优势,能有效抗环境光干扰。接着详细解析NEC协议格式,包括9ms起始信号、地址码、命令码及其反码校验机制,并给出逻辑1和0的调制方式。在接收端实现上,展示了GD32F330定时器输入捕获配置代码,通过双边沿触发测量脉冲宽度进行解码。文章还提供了状态机设计思路和数据结构,为低成本机器人红外回充方案提供了完整的技术实现方案。

m0_59406757的博客 1241

关于垃圾回收的几个问题

[color=red]一.为什么要清理 [/color] 为了回收程序不在使用的内存,垃圾回收器会负责释放对象占用的内存,在使用程序库时,把一个对象用完后就“弃之不顾”的做法是不安全的,java作为安全性较高的一种高级语言内置了专门的垃圾回收机制来负责收回无用对象占用的内存资源。 [color=green]要清楚垃圾回收工作方式首先了解下对象在堆和栈存储形式:[/color] ...

qingBYqing的专栏 337

ubuntu18.04安装xenomai3.1(百分百成功版)

ubuntu18.04安装xenomai3.1(百分百成功版),保姆级教学!!!

h542812556sdu的博客 2065

NVIDIA Video Codec SDK-解码接口cuvid简介

特性已废弃的 NVCUVID现代的 NVDECODE (底层 API)现代的 NVDECODE (高层 API - NvDecoder)状态已废弃 (Deprecated)官方推荐 (底层控制)官方推荐 (易用性首选)编程模型C 函数C 函数C++ 类复杂度高,需要管理大量细节中高,仍需管理解码会话低,开箱即用灵活性高高中(满足绝大多数场景)推荐对象遗留项目维护需要极致控制的高级用户所有新项目、大多数开发者。

fudexiang的博客 1178

python 垃圾回收详解

原文:https://zhuanlan.zhihu.com/p/31150408 总纲 策略和垃圾回收系统工作内容 引用计数详解 标记-清除+分代收集 循环引用 编程应用-常见方法 ex 过程详解 使用建议 触发机制 参...

weixin_30868855的博客 139

MoveIt控制睿尔曼RM65机械臂:从仿真到实机的3种控制模式对比

本文详细解析了使用MoveIt框架控制睿尔曼RM65机械臂的三种核心模式:拖动规划、目标姿态规划和Python API控制,从Gazebo仿真到实机部署的完整实现路径。通过ROS环境配置、控制参数优化及实机过渡技术,为工业自动化和机器人研究提供实用指南。

727

JVM中垃圾回收

JVM中的垃圾回收是通过对堆内存进行管理、清理无用对象,从而确保应用的高效运行。整个垃圾回收过程包括对象的分代存储、不同的垃圾回收算法(标记-清除、复制、标记-整理等),以及多种垃圾回收器(Serial GC、Parallel GC、CMS GC、G1 GC等)来适应不同的应用场景。优化垃圾回收是一个综合的过程,需要根据应用的特性选择合适的垃圾回收器,并通过合理的内存分配、减少对象创建与销毁、调优对象晋升策略等方法减少GC对应用性能的影响。

yymagicer的博客 2261

AI+医疗:多模态模型让肺结节诊断准确率突破95%+的实战方案

多模态融合是必由之路:单一影像模型难以突破95%准确率,必须整合临床、生物标志物等多维数据跨模态注意力机制是核心:简单拼接效果差,注意力机制能自动学习各模态权重,提升融合效果临床适配比技术先进更重要:模型输出必须符合医生诊断习惯,提供可解释的决策依据持续学习是长期成功的关键:医疗数据分布不断变化,模型必须具备自适应能力多学科协作是保障:放射科、胸外科、病理科、AI工程师共同参与模型设计与优化。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1022

视觉Transformer实战 | Data-efficient image Transformer(DeiT)详解与实现

在计算机视觉领域,Vision Transformer (ViT) 已经证明了纯 Transformer 架构在图像分类任务上的强大能力。然而,ViT 通常需要在大规模数据集上预训练才能达到最佳性能,DeiT (Data-efficient image Transformer) 通过引入一系列训练策略和优化,使得 Transformer 模型能够在相对较小的数据集上取得优异表现。本节将详细介绍 DeiT 的技术原理,并使用 PyTorch 从零开始实现 DeiT 模型。

盼小辉丶的博客 1341

java八股-垃圾回收机制-垃圾回收算法,分代回收,垃圾回收器

深入的图文并茂讲解垃圾回收器,垃圾回收算法,分代回收

weixin_46028606的博客 2772

10种电阻综合对比——《器件手册--电阻》

可变电阻在电子设备中也有很多用途,如在收音机的音量调节电路中,通过旋转可变电阻的旋钮来改变电路中的电阻值,从而改变通过扬声器的电流,实现音量的调节。根据电阻定律,电阻R = ρ(L/S),其中ρ是导体材料的电阻率,L是导体的长度,S是导体的横截面积。比如,同样材料制成的两根电线,粗的电线电阻比细的电线电阻小,长的电线电阻比短的电线电阻大。电流采样电阻的工作原理基于欧姆定律,即电阻两端的电压与通过电阻的电流成正比,公式为 I = V/R,其中 I是电流,V是电阻两端的电压,R 是电阻值。

XU157303764的博客 3144

一文整明白js中垃圾回收,垃圾回收的机制,为什么有垃圾回收

讲述了js中为什么有垃圾回收,垃圾回收的机制

weixin_64104823的博客 1803

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

一文看懂:JVM垃圾回收算法、CMS垃圾回收器、G1垃圾回收器

Hello,大家好,我是此林。今天我们来聊一聊 JVM 垃圾回收机制。在C/C++这类没有自动垃圾回收机制的语言中,一个对象如果不再使用,需要手动释放,否则就会出现内存泄漏。内存泄漏指的是不再使用的对象在系统中未被回收,内存泄漏的积累可能会导致内存溢出。手动回收的方式相对来说回收比较及时,删除代码执行之后对象就被回收了,可以快速释放内存。缺点是对程序员要求比较高,很容易出现创建完对象之后,程序员忘记释放对象。

2401_82540083的博客 2512

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

垃圾回收:垃圾回收器

垃圾收集器分类作用位置使用算法特点适用场景Serial串行运行作用于新生代复制算法响应速度优先适用于单CPU环境下的client模式ParNew并行运行作用于新生代复制算法响应速度优先多CPU环境Server模式下与CMS配合使用Parallel并行运行作用于新生代复制算法吞吐量优先适用于后台运算而不需要太多交互的场景Serial Old串行运行作用于老年代标记-压缩算法响应速度优先适用于单CPU环境下的Client模式并行运行作用于老年代。

学习总结 1527

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

垃圾回收算法和垃圾回收器

二万九千字,图文并茂解释垃圾回收算法和垃圾回收器,让你彻底理解垃圾回收算法和垃圾回收器

我是Java程序员廖志伟,感谢朋友们的支持! 1568

Java 垃圾回收

一般来说,Java开发人员大多关注业务逻辑的实现,但是,充分理解Java的 JVM中堆内存的分配和垃圾处理收集 这些内容可以让我们更有效地利用资源,更深刻的理解自己所写的代码。

码刀攻城 1412

JVM学习《垃圾回收算法和垃圾回收器》

因此就出现了一种标记-整理算法(Mark-Compact)算法,与标记-整理算法不同的是,在标记可回收的对象后将所有存活的对象压缩到内存的一端,使他们紧凑的排列在一起,然后对端边界以外的内存进行回收。重新标记阶段就是为了修正并发标记期间因为用户程序继续运行而导致标记产生变动的那一部分对象的标记记录(主要 是处理漏标问题),这个阶段的停顿时间一般会比初始标记阶段的时间稍长,远远比并发标记阶段时间短。垃圾收集时,遍历当前使用的区域,把存活对象复制到另外一个区域中,最后将当前使用的区域的可回收的对象进行回收。

GQ_666的博客 1631

JVM——垃圾回收

本文详细介绍了Java垃圾回收机制的核心概念和实现方法。首先,文章解释了如何判断对象可以回收,包括引用计数法和可达性分析算法,并介绍了四种引用类型:强引用、软引用、弱引用和虚引用。接着,文章探讨了三种垃圾回收算法:标记清除、标记整理和标记复制,并分析了它们的优缺点。随后,文章介绍了分代垃圾回收机制,将堆内存划分为新生代和老年代,并详细描述了MinorGC的流程。此外,文章还介绍了六种常见的垃圾回收器,包括串行、并行和并发的垃圾回收器,并重点分析了CMS和G1垃圾回收器的工作原理和优缺点。最后,文章提供了垃圾

2301_81283571的博客 1668

JVM垃圾回收

垃圾回收,回收算法,垃圾回收器,cms,serial new,serial old,parallel,GC日志

weixin_38612401的博客 4507

JVM垃圾回收算法及垃圾回收器

JVM基本垃圾回收算法,按照基本回收策略分 标记-清除(Mark-Sweep) 一、标记-清除(Mark-Sweep) https://www.html.cn/qa/other/22924.html 此算法执行分两阶段。 第一阶段 标记:遍历内存区域,对需要回收的对象打上标记。 第二阶段 清除:再次遍历内存,对已经标记过的内存进行回收。 此算法需要暂停整个应用 绿色、蓝色---代表存活对象 灰色---非存活对象 白色--未使用的内存 缺点: 效率问题:遍历了两次内存空间(

喵酱 2958

JVM虚拟机-垃圾回收(垃圾回收器、垃圾回收算法、分代回收、四大引用)

本文系统解析JVM垃圾回收机制,详解分代回收模型(新生代/老年代)、标记-清除/复制/整理算法原理,对比Serial、CMS、G1等回收器核心差异。结合强引用、软引用、弱引用、虚引用的应用场景与内存管理策略,探讨GC调优参数配置及内存泄漏排查思路,助力开发者理解回收逻辑,优化Java应用性能与稳定性。

Crayon26的博客 1153
上一篇: 运行时数据区域
下一篇: java内存模型简述
weeweee
博客等级 码龄16年 10粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值