Java虚拟机学习 - 垃圾收集算法

麒麟V10 arm64离线部署Docker与Compose全流程踩坑实录 在国产化与信创迁移的浪潮中,容器化技术正从开发环境向生产环境加速落地,而离线部署则成为内网与涉密场景的刚需。容器运行时依赖操作系统内核特性、cgroup驱动与网络规则,不同CPU架构(如amd64与arm64)更是两套独立生态,选错二进制包往往导致“Exec format error”。理解Docker静态包与系统依赖链的关系,掌握systemd服务配置、overlay2存储驱动、镜像save/load机制和Compose插件安装原理,是确保容器平台稳定运行的关键。这类能力广泛应用于麒麟、统信等国产操作系统 阅读详情

跟踪收集器

跟踪收集器采用的为集中式的管理方式,全局记录对象之间的引用状态,执行时从一些列GC  Roots的对象做为起点,从这些节点向下开始进行搜索所有的引用链,当一个对象到GC  Roots 没有任何引用链时,则证明此对象是不可用的。
下图中,对象Object6、Object7、Object8虽然互相引用,但他们的GC Roots是不可到达的,所以它们将会被判定为是可回收的对象。

可作为GC Roots 的对象包括:
虚拟机栈(栈帧中的本地变量表)中的引用对象。
方法区中的类静态属性引用的对象
方法区中的常量引用的对象
本地方法栈中JNI的引用对象。

主要有复制、标记清除、标记压缩三种实现算法。 

1. 标记 - 清除算法 

标记清除算法是最基础的收集算法,其他收集算法都是基于这种思想。标记清除算法分为“标记”和“清除”两个阶段:首先标记出需要回收的对象,标记完成之后统一清除对象。

它的主要缺点:

①.标记和清除过程效率不高 

②.标记清除之后会产生大量不连续的内存碎片。


2. 复制算法 

它将可用内存容量划分为大小相等的两块,每次只使用其中的一块。当这一块用完之后,就将还存活的对象复制到另外一块上面,然后在把已使用过的内存空间一次清理掉。这样使得每次都是对其中的一块进行内存回收,不会产生碎片等情况,只要移动堆订的指针,按顺序分配内存即可,实现简单,运行高效。

主要缺点:

内存缩小为原来的一半。

                            


3. 标记  - 整理算法

标记操作和“标记-清除”算法一致,后续操作不只是直接清理对象,而是在清理无用对象完成后让所有存活的对象都向一端移动,并更新引用其对象的指针。

主要缺点:

在标记-清除的基础上还需进行对象的移动,成本相对较高,好处则是不会产生内存碎片。


引用计数收集器

引用计数收集器采用的是分散式管理方式,通过计数器记录对象是否被引用。当计数器为0时说明此对象不在被使用,可以被回收。

主要缺点:

循环引用的场景下无法实现回收,例如下面的图中,ObjectC和ObjectB相互引用,那么ObjectA即便释放了对ObjectC、ObjectB的引用,也无法回收。sunJDK在实现GC时未采用这种方式。



本文原文链接:http://blog.youkuaiyun.com/java2000_wl/article/details/8022293 转载请注明出处!

(十)安卓开发中的Activity之间的通信使用详解 下面将结合代码和具体在 Android 开发中,Activity 之间的通信是非常常见且核心的功能之一使用场景,详细讲解这几种方式。 阅读详情

相关推荐

Simulink模块库介绍(一)——信号源模块

Simulink模块库介绍(一)——信号源模块库目录Clock模块Digital Clock模块Band-Limited White Noise模块 目录 simulink模块库中提供了丰富的信号源模块组。逐一介绍,算是对之前做个总结吧 Clock模块 通过时钟模块,输出的时间作为判断呢,如下图,前2s之前为高斯白噪声,后2s为正弦曲线,共计10s。 Digital Clock模块 数字时钟模块主要用于离散系统的计时,sample time表示采用时间,如下图:分别是1s和0.5s的采样时间 Band-

5万+

垃圾收集算法

文章目录前言一、如何判断对象的生死1、引用计数法2、可达性分析算法可以作为GC Roots 的是二、分代收集理论1.分代理论内容2.跨带引用假说三、垃圾收集算法1、标记-清除算法2、标记-复制算法3、标记-整理算法 前言 在jvm堆里面存放着Java世界中几乎所有的对象实例,垃圾收集器在对堆进行回收前,第一件事情就 是要确定这些对象之中哪些还“存活”着,哪些已经“死去”(“死去”即不可能再被任何途径使用的对 象)了。 一、如何判断对象的生死 1、引用计数法 引用计数法判断对象是否存活靠的是,在对象中添

m0_57659908的博客 1368

2023-10-20 - MacBook - 优化外接2k显示器体验:告别字小与字虚的终极指南

本文针对MacBook外接2K显示器时普遍遇到的字体过小和边缘发虚问题,提供了终极解决方案。通过深入解析macOS的HiDPI与Retina显示原理,并详细指导使用SwitchResX等工具开启隐藏的HiDPI模式,实现完美的2倍整数缩放,从而在保证字体大小合适的同时获得清晰锐利的显示效果,彻底告别字小与字虚的困扰。

solidity8miner的博客 476

GC算法

GC是Java的垃圾回收。垃圾收集算法有如下几种:(1)、Mark-Sweep(标记-清除)算法  这是最基础的垃圾回收算法,之所以说它是最基础的是因为它最容易实现,思想也是最简单的。标记-清除算法分为两个阶段:标记阶段和清除阶段。标记阶段的任务是标记出所有需要被回收的对象,清除阶段就是回收被标记的对象所占用的空间。具体过程如下图所示:  从图中可以很容易看出标记-清除算法实现起来比较容易,但是有...

yufeiyanliu的专栏 749

比例导引算法详解:从理论到Matlab实现(含3D轨迹可视化)

本文深入解析比例导引算法(PNG)的数学原理与Matlab实现,涵盖3D轨迹可视化技术。从基础运动学模型到导航比优化,详细讲解导弹拦截系统的核心算法,并提供Matlab代码示例,帮助读者掌握从理论到实战的全流程。

weixin_33725722的博客 548

再见 n8n?Google Opal 实测:一句话生成 APP,这才是 AI 的正确打开方式!

Google Opal深度评测:这款自然语言生成工作流的AI工具,通过三个实战案例(科技早报生成器、冰箱食谱助手、爆款文案转译机)展示了其零代码开发的强大能力。它凭借Gemini 3.0 Pro和Google生态的无缝集成,将自动化门槛降至新低,预示着一个“意图驱动开发”的新时代。

莫潇羽的个人博客 848

基于Python Django的招聘就业系统毕业设计开发实战解析

在计算机项目开发中,毕业设计常常需要构建一个兼具业务复杂度与技术深度的系统。Django框架凭借其自带ORM、Admin后台与认证体系,成为快速实现多角色Web应用的经典选择。其模型-视图-模板分层原理,能够清晰支撑用户认证、数据表设计、权限控制等核心模块。利用该框架构建招聘就业系统,可实现简历管理、职位发布、投递状态流转及岗位匹配推荐等完整业务流程,覆盖求职者、企业、管理员三类角色的真实应用场景。系统基于技能标签集合计算匹配分数,并配合状态机设计保证业务逻辑清晰。通过环境搭建、数据模型设计到功能实现与部署

weixin_34342905的博客 475

基于CNN的表情识别(FER)pytorch实现

Report for FER Jian Tang Abstract 我们使用卷积神经网络(CNN)实现了baby的面部表情识别(FER)。 数据上,我们获取了开源FER数据集FER2013[1],besides我们使用爬虫获取了baby相关的人脸图片,进行了手工分类标注以形成一个全新的baby FER数据集。 模型上,我们首先复现了Luan[2]的工作,即参考Kuo[3]在CVPR 2018上的工作并实现一个轻量的CNN网络,在FER2013上进行训练并得到了XXXX%的平均分类准确率(avg a

qq_20241587的博客 3683

JVM学习笔记-跟踪收集器(Tracing Collectors)

  Tracing Collectors Tracing garbage collectors trace out the graph of object references starting with the root nodes. Objects that are encountered during the trace are marked in some way. M...

denverj的专栏 338

yolov8的Detect层详解(输出维度改动)

对于部署端需要拿到onnx的output进行后处理,但是基于anchor_free的yolov8输出是1*(4+cls)*8400,不是我们常见的ncwh格式,所以对Detect层进行了学习,分享一下体会。

yjcccccc的博客 2万+

Polars简明基础教程一:Polars快速入门

在这个例子中,我们将添加一个列,其中包含每个舱位中乘客的最大年龄。在Python中(而不是特指Polars),当我们将代码包裹在括号中时,我们可以在新行上调用一个新方法——在这种情况下是select。在这里,我们看到一个使用表达式API的简单示例,其中我们在select语句中选择Pclass、Name和Age列(我们将在第3节中深入了解select语句)。表达式是一个函数,它接受一个Series(或DataFrame中的列)作为输入,并返回一个Series(或DataFrame中的列)。

sosogod的博客 3879

四种垃圾收集算法

四种垃圾收集算法

weixin_44330810的博客 1880

FPGA,关于安装使用libero IDE V9.2 及其gold floating license配置

3、license安装根据,下面的提示进行,跟随setting up the license server on a host教程操作。1、从官网下载Libero IDE v9.2(如下图中的Libero IDE v9.2 software)4、下载完成license解压包后还需要下载 Daemons license ,地址如下。(2)第一行并不是在内填写,而是直接用您电脑名替换掉(1)修改license.bat前四行是,其务必保持和案例位置相同(避免出错)............

JasonK的博客 4297

深入学习Java虚拟机之——垃圾收集算法与垃圾收集器

今天我们将一起学习Java虚拟机使用垃圾收集算法和常见的垃圾收集器。Java虚拟机内存区域的程序计数器、虚拟机栈和本地方法栈3个区域是随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出出栈和入栈。每一个栈帧中分配多少内存基本上是在类结构确定下来的时候就已知的,因此这个几个区域的内存分配和回收都具备确定性,在这几个区域就不需要过多考虑回收问题,因为方法结束或者线程结束时,内存自然就跟着回收了。而

jcncsdn的博客 941

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java虚拟机学习笔记(二):垃圾收集算法及HotSpot的算法实现

概述 垃圾收集(GC)需要考虑3件事情: (1)哪些内存需要回收? (2)什么时候回收? (3)如何回收? 前面我们已经提及程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈的操作,每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知。而Java堆和方法区则不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多...

cp_Mark的博客 376

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java虚拟机深入学习之三: Java虚拟机的垃圾收集算法

一   标记-清除算法(Mark-Sweep)        首先标记出所有需要回收的对象,标记完成后统一回收。         主要缺点: 1. 标记和清除效率都很低    2. 产生大量不连续的内存碎片,导致后面分配大内存空间失败 二   复制算法        将可用内存划分为大小相等的两块, 每次只使用其中一块。 当这块用完后,就将还存活对象复制到另外一块上面,再把

NewJerryj的专栏 1035

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java虚拟机学习笔记(2)——垃圾收集算法

上一篇文章学习了JVM基本的内存模型,JVM内存区域可以分为:方法区、堆区、虚拟机栈、本地方法栈、程序计数器。方法区和堆区属于线程共享区域, 而虚拟机栈、本地方法栈、程序计数器则属于线程隔离区域。其中,Hotspot虚拟机将虚拟机栈和本地方法栈合二为一,并且,由于该虚拟机实现将GC范围扩展 至方法区,所以方法区也常被Hotspot开发者称为“永久代”。

wjljsbk的博客 628

Java虚拟机学习2:垃圾收集算法

跟踪收集器 跟踪收集器采用的为集中式的管理方式,全局记录对象之间的引用状态,执行时从一些列GC Roots的对象做为起点,从这些节点向下开始进行搜索所有的引用链,当一个对象到GC Roots 没有任何引用链时,则证明此对象是不可用的。 下图中,对象Object6、Object7、Object8虽然互相引用,但他们的GC Roots是不可到达的,所以它们将会被判定为是可回收的对象。 可作为GC Roots 的对象包括: 虚拟机栈(栈帧中的本地变量表)中的引用对象。 方法区中的类静态属性引用的..

jinyanliang的专栏 98
上一篇: Java虚拟机学习 - 对象访问
下一篇: Java虚拟机学习 - 垃圾收集器
胸口碎大石_
博客等级 码龄17年 1154粉丝 82原创
评论 23
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值