Java垃圾回收机制分析

【硬件设计】_基于STM32单片机的智能台灯系统 智能台灯系统是一款多功能的智能照明设备,能够自动调节亮度、监测人体活动、感知环境光照,并具备定时和报警功能,极大提升了用户体验与功能的灵活性,主要包括以下功能:系统提供自动和手动两种模式以调节台灯亮度。在自动模式下,台灯会根据周围光强智能调整;而在手动模式下,用户可通过按键自行设置亮度。利用红外光电开关检测台灯与用户之间的距离,若距离过近,系统将发出报警提示。通过时钟模块设置定时提醒,并在OLED显示屏上显示当前时间,当达到设定的定时时间时,蜂鸣器将发出报警音。 阅读详情


今天主要讲讲Java的垃圾回收机制,根据主题,本文将按照如下几个点进行分析:

一、什么是垃圾回收

        JVM垃圾回收是指回收存储在内存中且未被使用的Java对象所占用的空间。一般而言,Java对象被创建的时候,会在堆中开辟一块内存用于存储对象信息,因此我们说的垃圾回收一般是指回收堆中的垃圾,方法区也会存储一些垃圾,也会涉及到垃圾回收,本节暂不讨论。

二、为什么要回收垃圾

        由于内存资源比较匮乏,程序在运行过程中,需要不断的进行对象的创建,这些创建的对象需要内存空间进行保存,因此,需要将一些已经不再使用的对象回收,将回收的空间交给新创建的对象使用。

三、如何标定垃圾

        同其他的框架或算法一样,JVM对垃圾标定的算法也是不断的进化的。起先,JVM设计者采用引用计数法进行垃圾标定,由于引用计数法无法解决循环引用的问题,因此,JVM设计者采用了另外一种算法–可达性分析,来标定垃圾。

1.引用计数法

i)简介

        引用计数的意思是,如果某对象有被引用,则引用加1,取消引用,则引用减1,如果引用为0,表示该对象为垃圾,可被JVM回收。

ii)问题分析

class Count {
	Count obj;

	public static void main(String[] args) {
			// 创建两个对象
			Count obj_1 = new Count();
			Count obj_2 = new Count();
			// 引用
			obj_1.obj = obj_2; // 引用obj_2
			obj_2.obj = obj_1; // 引用obj_1
			// 指向为空
			obj_1 = null;
			obj_2 = null;
	}
}

        上述代码中,obj_1和obj_2对象都存在引用的关系,但是代码后部分通过将其指向空后,程序中无法再使用了对象obj_1和obj_2,因此,这两个对象可以被标定为垃圾,而引用计数法进行标定的时候发现,该对象存在引用的关系,可知,内存中存在两个无法被使用的对象,出现了内存泄漏问题。从引用计数结构图(下图1)可以看出,obj_1和obj_2存在引用的关系,但是外界却无法引用到obj_1和obj_2。
在这里插入图片描述
                                图1 引用计数结构图

2.可达性分析

        可达性分析是根据对象的可达状态进行垃圾标定的,它需要一个根节点(GC Root),然后通过根节点进行对象查找,如果能通过根节点找到的对象,表示该对象时可达到的对象,否则为不可达对象。Java垃圾回收的时候,会将不可达对象的内存回收。
在这里插入图片描述
                                                                图2 可达性分析结构图
        可达性分析结构图(如图2)中,蓝色表示可通过GC Root找到,灰色表示无法通过GC Root找到(注意:灰色对象之间也可以存在可达性状态,如:obj_6能够找打obj_9),灰色的为垃圾,需要被回收。

       一般而言,我们创建对象的方法有如下几种:

// 方式1
static ClassName STATIC_CN = new ClassName;
// 方式2
final static ClassName F_STATIC_CN = new ClassName;
// 方式3
private void testMethod() {
	ClassName cn = new ClassName();
}

方式1:静态变量指向一个对象;
方式2:静态常量指向一个对象;
方式3:局部变量执行一个对象;

因此GC Root的范围在本地方法栈、虚拟机栈和方法区中的对象中;

四、垃圾回收算法

1.标记-清除

2.标记-复制

3.标记-整理

4.复制算法

五、垃圾收集器

1.Serial

2.ParNew

3.Parrellel Scavenge

4.Serial Old

5.Parrellel Old

6.CMS

7.G1

华为EC6108V9E刷机实战:从U盘准备到开机优化的完整避坑指南 本文提供华为悦盒EC6108V9E刷机与优化的完整实战指南。针对搭载RK3228芯片和安卓4.4.4系统的设备,从型号确认、固件选择、U盘准备,到详细刷机步骤、常见故障排除,以及刷机后的深度性能优化,手把手帮助用户规避风险,让旧盒子焕发新生,成为流畅的全能媒体中心。 阅读详情

相关推荐

SAP-QM-质检操作

SAP-QM-质检操作

yanzibing99的博客 8180

Parallel Scavenge收集器

Parallel Scavenge 特点 Parallel Scavenge收集器是一个新生代收集器,它也是使用【标记-复制】算法的收集器,并且并行的多线程收集。 CMS收集器 关注点是尽可能地缩短垃圾收集时用户线程的停顿时间 停顿时间越短就越适合需要与用户交互的程序,良好的响应速度能提升用户体验。 Parallel Scavenge 收集器的目标则是达到一个可控制的吞吐量(Throughput) 吞吐量是CPU用于运行用户代码的时间与CPU总消耗时间的比值,即吞吐量 = 运行用户代码时间 /(运

summer_fish的专栏 751

手把手教你用Ubuntu 22.04的附加驱动工具安装NVIDIA显卡驱动(含常见错误修复)

本文详细介绍了在Ubuntu 22.04系统上,如何通过图形化的“附加驱动”工具安全、便捷地安装NVIDIA显卡驱动。内容涵盖从准备工作、禁用默认的nouveau驱动、图形界面安装实操,到安装后的验证(如使用nvidia-smi命令),并提供了安装失败黑屏、亮度调节失效等常见问题的深度解决方案,帮助用户彻底搞定驱动安装难题。

weixin_29248653的博客 602

看完这篇垃圾回收,和面试官扯皮没问题了

前言 Java 相比 C/C++ 最显著的特点便是引入了自动垃圾回收 (下文统一用 GC 指代自动垃圾回收),它解决了 C/C++ 最令人头疼的内存管理问题,让程序员专注于程序本身,不用...

weixin_41385912的博客 1697

保姆级教程:在mmdetection中手动计算并可视化P、R、F1值(附完整代码)

本文提供了一份详细的mmdetection教程,指导开发者如何手动计算并可视化精确率(P)、召回率(R)和F1值。通过完整的代码示例和清晰的步骤说明,帮助用户深入理解目标检测模型的性能评估方法,特别适合需要精细分析模型表现的计算机视觉研究人员和工程师。

weixin_29038303的博客 401

OpenEvidence DeepConsult深度分析:技术架构、临床应用与行业影响

摘要:医疗AI平台OpenEvidence通过多智能体协作系统重构临床决策流程,解决了医学信息过载难题。其DeepConsult系统严格基于同行评审文献,5-10秒内提供循证决策支持,已覆盖40%美国医生,月咨询量达850万次。该平台采用"免费工具+广告变现"模式,通过调度、检索、摘要等模块化智能体分工,实现从文献分析到临床建议的闭环处理,在USMLE测试中准确率达90%。2025年获7500万美元融资后估值突破10亿美元,成为医疗AI领域的新范式。

AllenLV的博客 2556

GC 垃圾回收算法

GC 垃圾回收

liuqinhou的博客 4946

新手必看:如何用PhaGCN2和vConTACT2搞定宏病毒组注释(附避坑指南)

本文为宏病毒组研究新手提供了使用PhaGCN2和vConTACT2进行病毒注释的完整实战指南。内容涵盖从Conda环境配置、软件安装、参数解析到结果解读的全流程,并重点分享了整合双工具进行交叉验证的策略与常见报错解决方案,旨在帮助研究者高效、准确地完成病毒分类注释工作。

j2k3l4的博客 797

java8 parallel并行处理实战

需求 我需要做一个人员某几项数据的统计,由于数据量较大,不能一次性加载到内存进行统计。所以采用了遍历每个用户。当然也可以分配处理。 分析需求可得知,每个用户其实互不相关,数据的统计可以同步进行,因此考虑到并发执行。而java8刚好提供了这样的功能,对集合数据的并发执行parallel,所以有了以下测试 为加快统计速度尝试 原代码用时 2018-10-15 15:03:22.863 |-IN...

weixin_34279579的博客 705

医学图像可视化实战:ITK-SNAP与Python+SimpleITK双方案解析

本文深入解析了医学图像可视化的两大核心方案:ITK-SNAP与Python+SimpleITK。ITK-SNAP作为专业无损浏览器,是数据探索与分析的必备工具;而Python+SimpleITK方案则提供了自动化处理能力,但需注意将.nii.gz数据转换为JPG等格式时的信息损失。文章通过实战对比,为医学影像处理者提供了清晰的选择指南与避坑建议。

ol789012的博客 490

嵌入式Linux&Android开发-TP调试

目录 一、修改DTS,添加新的I2C设备 二、修改Makefile,Kconfig 三、tp调试时的问题排查 一、修改DTS,添加新的I2C设备 &i2c4 { status = "okay"; clock-frequency = <400000>; gslX680@40 { compatible = "gslX680"; reg = <0x40>; touch-gpio = <&gp

嵌入式成长手册 572

java基础总结(七十二)--java8中parallel使用注意事项

package test; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class noname { public static void main(String[] args) { List<Integer> l...

秋天的猿 2106

Labview邪修01:贪吃蛇小游戏

摘要:博主使用LabVIEW 2020(32位)复刻了经典贪吃蛇游戏。程序具备随机生成蛇(初始长度3)和食物、三档速度调节、键盘方向控制等功能,碰撞边界或自身即游戏结束。实现过程包括:1)界面设计,使用二维颜色盒数组构建游戏区,添加速度枚举控件和功能按钮;2)程序架构,采用模块化设计包含Main.vi、Start.vi等6个核心VI,分别处理初始化、位置计算、碰撞检测等逻辑;3)事件驱动机制,通过开始/结束事件、按键响应和超时循环实现游戏流程控制。运行时可实时显示分数,完整还原了贪吃蛇的核心玩法。

weixin_38637405的博客 972

Java的垃圾回收机制介绍、工作原理、算法及分析调优

Java的垃圾回收(Garbage Collection,GC)是Java虚拟机(JVM)提供的一种自动内存管理机制,用于自动回收不再使用的内存空间,以避免内存泄露和内存溢出等问题。下面主要介绍Java垃圾回收的基本概念、工作原理、算法等。

jackiendsc的博客 1995

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

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

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java内存结构与垃圾回收机制算法分析

什么是HotSpot VM 提起HotSpot VM,相信所有Java程序员都知道,它是Sun JDK和OpenJDK中所带的虚拟机,也是目前使用范围最广的Java虚拟机。 但不一定所有人都知道的是,这个目前看起来“血统纯正”的虚拟机在最初并非由Sun公司开发,而是由一家名为“Longview Technologies”的小公司设计的; 甚至这个虚拟机最初并非是为Java语言而开发的,它来源...

Leon_Jinhai_Sun的博客 281

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java垃圾回收机制 | 可达性分析,垃圾收集器

转自:Java垃圾回收机制 | 可达性分析,垃圾收集器 导读 一个对象的一生经历了什么? 如何判断对象是否可用? 引用计数法和可达性分析算法各有什么优缺点? 哪些对象可以作为GC ROOT? 垃圾回收的时候如何快速寻找到根节点?(安全点和OopMap) 垃圾回收算法有哪些?各有什么优缺点? 有哪些垃圾回收器?各有什么优缺点?适用什么场景 1、对象回收处理过程 2、判断用户是否可用算法 2.1、引用计数算法 如上图,给对象一个引用计数器refCount。每有一个对象引用它,计数器

hxc2101的博客 459

ssm框架搭建

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

全面分析Java的垃圾回收机制

Java的堆是一个运行时数据区,类的实例(对象)从中分配空间。Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通过new、newarray、anewarray和multianewarray等指令建立,但是它们不需要程序代码来显式地释放。一般来说,堆的是由垃圾回收 来负责的,尽管JVM规范并不要求特殊的垃圾回收技术,甚至根本就不需要垃圾回收,但是由于内存的有...

amiao2014的专栏 241

java垃圾回收机制分析

java垃圾回收机制分析一、什么是java垃圾回收   Java的堆是一个运行时数据区,类的实例(对象)从中分配空间。Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通过new、newarray、anewarray和multianewarray等指令建立,但是它们不需要程序代码来显式地释放。一般来说,堆是由垃圾回收来负责的,尽管JVM规范并不要求特殊的垃圾回收技术,甚至根本就不需要垃圾回收,但是由于内存的有限性,JVM在实现的时候都有一个由垃圾回收所管理的堆。垃圾回收是一种动

salonzhou的专栏 810

Java面试官最爱问的垃圾回收机制,这位阿里P7大佬分析总结的属实到位

2021年的金三银四一眨眼就到了,对于很多人来说是跳槽的好机会,大厂面试远没有我们想的那么困难,摆好心态,做好准备,你也可以的。另外,面试中遇到不会的问题不妨尝试讲讲自己的思路,因为有些问题不是考察我们的编程能力,而是逻辑思维表达能力;最后平时要进行自我分析与评价,做好职业规划,不断摸索,提高自己的编程能力和抽象思维能力。BAT面试经验实战系列:Spring全家桶+Redis等其他相关的电子书:源码+调优面试真题:《一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码》

2401_84152317的博客 947

Java-jvm垃圾回收机制算法分析

垃圾回收机制概述  Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再需要考虑内存管理。由于有个垃圾回收机制,Java中的对象不再有“作用域”的概念,只有对象的引用才有“作用域”。垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。   ps:内存泄露是指该内存空间使用完毕之后未回收,在不涉及复杂数据结构的一般情况下,Java 的内存泄露表现为一个内存对象的生命周期超出了程序需要它的时间长度,我们有时也将其称为“对

魔法革1996 242
上一篇: 数据结构:约瑟夫问题Java实现
gd_2014
博客等级 码龄12年 1粉丝 8原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值