垃圾回收算法简介——JVM读书笔记<二>

JVM内存概况与垃圾回收机制详解 参考:《Java虚拟机精讲》   一、JVM虚拟机内部的内存分布的概况     其中方法区我在博文 java虚拟机类加载过程内存情况底层源码分析及ClassLoader讲解中详细讲解过,可参考那篇文章。它里面主要保存:运行时常量池、字段和方法数据、构造函数、普通方法的字节码等。    PC寄存器会存储正在执行的字节码指令地址,线程私有 Java栈也为线程私有,生命周期与线程的生命... 阅读详情

垃圾回收的过程主要包括两部分:找出已死去的对象、移除已死去的对象。

确定哪些对象存活有两种方式:引用计数算法、可达性分析算法。

方案一:引用计数算法

给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值加1;当引用失效时,计数器值减1;计数器的值为0时即表明对象已经死去(可被回收)。

优点:实现简单,判定效率高。

缺点:难解决对象之间互相引用的问题。

如:对象objA和objB都有字段instance,令objA.instance=objB,objB.instance=objA;除此之外,objA和objB再无其他引用,理论上objA和objB可以被回收(无法被访问),但因为计数器变为0,所以导致内存泄露。

方案二:可达性分析算法

通过“GC Roots”对象作为起始点,从这些节点开始向下搜索,被搜索到的对象marked,堆中未被maked的对象表明不可达(可被回收)。

在Java语言中,课作为GC Roots的对象包括如下四种:

1.虚拟机栈(栈帧中的本地变量表)中引用的对象

2.方法区中类静态属性引用的对象

3.方法区中常量引用的对象

4.本地方法栈中JNI(即一般说的Native方法)引用的对象


垃圾收集算法:

1.标记-清除(Mark-Sweep):用上面描述的方法标记出需要回收的对象,标记后统一回收所有被标记的对象。

2. 复制算法: 为了解决上述算法清除造成可用空间碎片化的问题,复制算法将内存空间分成大小相等的两部分,当一部分使用完时,将存活的对象移至另一部分。

3. 标记-整理(Mark-Compact):上述算法造成实际使用空间只占了分配空间的一半,标记-整理算法在标记后,将所有存活对象向一端移动,然后直接清理掉端边界以外的内存。

4.分代收集算法:研究表明新生代中的对象98%是“朝生夕死”的,所以将对象添加年龄属性,根据不同的年龄决定对象存放位置。具体可参考:Java垃圾回收


说明:本文的内容参考书籍《深入理解Java虚拟机(第2版)》

手把手教你搞定JBI投稿:从Statement of Significance到Declaration Statement的保姆级避坑指南 本文提供了一份详细的JBI投稿指南,重点解析Statement of Significance和Declaration of Interests的撰写技巧,帮助研究者避开常见格式陷阱。通过实战案例和检查清单,确保投稿符合JBI的学术严谨性和临床转化价值要求,提升稿件通过率。 阅读详情

相关推荐

gesp c++ 五级知识点

gesp c++ 五级知识点

MMD.然大大 2009

《深入理解Java虚拟机》个人读书总结——垃圾收集/回收算法

垃圾收集/回收算法

一个普本码农奋斗史 1990

深度解构事务码 SQF:Support Query Framework 与 ABAP 静态分析实战

某制造企业在年度审计前,需要确认自定义发票过账程序 ZFI_INV* 系列是否存在硬编码公司代码与未捕获异常。技术团队在字段填入ZFI_INV*后,勾选与规则,执行扫描。SQF 生成的 ALV 报告列出 42 个警告,其中 17 条与抛出 CX_SY_NO_HANDLER 相关,8 条涉及动态 SQL 注入风险。结果导出至 Excel 供开发整改,并在 ATC 阶段验证修复。此过程较手工逐个执行 Code Inspector 节省超 80 % 时间。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 218

一本书掌握自动内存回收的机制《垃圾回收的算法与实现》(好书分享更新中)

垃圾回收的算法与实现分为“算法篇”和“实现篇”两大部分。算法篇介绍了标记-清除算法、引用计数法、复制算法、标记-压缩算法、保守式GC、分代垃圾回收、增量式垃圾回收、RCImmix算法等几种重要的算法;实现篇介绍了垃圾回收在Python、DalvikVM、Rubinius、V8等几种语言处理程序中的具体实现。 本书特色 ★ Ruby之父松本行弘推荐:上古传承之魔法,彻底揭开垃圾回收的秘密! ★ 日本天才程序员兼LISP黑客竹内郁雄审校 ★ 254幅图解,轻松掌握GC经典算法 ★ 实际源码剖析,深入探讨GC具

qq_18591859的博客 309

Python爬虫selenium验证-中文识别点选+图片验证码案例

环境对模型进行训练,参考:https://github.com/sml2h3/dddd_trainer。能识别,但是发现默认识别率有点低,想要提升识别率,可以搭建。截图每个字符,并基于ddddocr识别。根据坐标,在验证码上进行点击。

dme.的博客 2165

【FPGA教程案例49】控制案例1——基于FPGA的PID控制器verilog实现

PID控制器产生于1915年,PID控制律的概念最早是由LYAPIMOV提出的,到目前为止,PID控制器以及改进的PID控制器在工业控制领域里最为常见。PID控制器(比例-积分-微分控制器),由比例单元 P、积分单元 I 和微分单元 D 组成。通过Kp,Ki和Kd三个参数的设定。PID控制器主要适用于基本线性和动态特性不随时间变化的系统。图1为PID控制器的基本结构框图。PID控制器以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。...

FPGA/MATLAB学习教程/源码/项目合作开发 4531

《剑指JVM》读书笔记之垃圾回收算法

《剑指JVM》读书笔记之垃圾回收算法

905

Android性能分析深度指南:Perfetto工具全面解析

本文深入探讨Android性能优化工具Perfetto的应用与实践。作为Google推出的新一代追踪系统,Perfetto整合了CPU调度、内存分配、电池状态等多维度分析功能,通过高性能数据处理和可视化界面帮助开发者定位性能瓶颈。文章系统介绍了Perfetto的架构原理、配置方法和核心功能,包括CPU性能分析、内存泄漏检测等关键技术。通过电商应用卡顿优化的实战案例,展示了如何利用数学建模(如帧时间公式$T_{\text{render}}\leq16.67\text{ms}$)指导性能调优。

郑伟强dev的专栏 144

【十七】JVM内存分配、垃圾回收算法、垃圾回收器(1.7)

本篇是对《深入理解Java虚拟机----JVM高级特性与最佳实践》周志明作的第二版对应内容的一个读书笔记。 先贴上JVM运行时数据区的图 其中:程序计数器、虚拟机栈、本地方法栈这3个区域,都是随线程而生,随线程而死。不需要过多的考虑垃圾回收的问题。 垃圾回收需要考虑的是:1.方法区 2.堆 一、内存分配与回收 1.1 方法区 属于永久代 perm generation 主要回收2...

Sid小杰的博客 1429

基于 STM32 的乒乓球发球机控制系统设计与实现

乒乓球发球机是一种能够按照预设参数自动、连续发出乒乓球的训练设备。本系统以 STM32F103C8T6 为主控核心,通过控制实现球速调节、实现落点与旋转方向控制、实现出球节奏控制,并配合 OLED 显示与按键人机交互,实现速度、频率、落点、旋转四大参数的可调发球训练。

weixin_42300449的博客 210

多智能体系统在军事仿真中的应用:AI人工智能战略推演

本文旨在全面解析多智能体系统在军事仿真领域的应用技术,重点探讨AI驱动的战略推演系统的设计原理和实现方法。研究范围涵盖从基础理论到实际应用的完整技术栈。本文采用从理论到实践的递进结构,首先介绍核心概念,然后深入算法实现,最后展示实际应用案例和未来展望。多智能体系统(MAS):由多个相互作用的智能体组成的分布式系统军事仿真(Military Simulation):通过计算机模拟军事行动和战争场景战略推演(Strategic Wargaming):通过模拟推演评估军事战略的有效性更高保真度的仿真。

AI天才研究院 1777

[Java Performance] Java垃圾回收简介

本系列作为Java Performance:The Definitive Guide的读书笔记。 概览 在目前的JVM中,主要有4中垃圾回收器(Garbage Collector): 串行回收器(Serial Collector),主要用于单核计算机吞吐量(并行)回收器(Throughput/Parallel Collector)并发回收器(Concurrent/CMS Co

不忘初心,好好沉淀 4658

揭秘 C++ 性能优化的终极秘籍,让你面试时应答如流

VTune Amplifier 是英特尔开发的一款强大的性能分析工具,它可以深入分析应用程序在英特尔架构上的性能瓶颈。功能特点全面的分析视角:提供了多种分析模式,如热点分析、线程分析、内存分析等。热点分析模式能快速定位程序中最耗时的代码段;线程分析模式可帮助开发者了解多线程程序中线程的执行情况、同步开销等;内存分析模式则专注于内存访问的性能,包括缓存命中率、内存带宽使用等。硬件层面的洞察:能够深入到硬件层面,分析 CPU 的微架构指标,如指令级并行度、流水线停顿等。

大模型大数据攻城狮的专栏 1152

读书笔记 | JVM 的垃圾回收机制

一、概述 本篇博客是基于《深入理解Java虚拟机》一书的读书笔记,主要记录的是关于 GC 方面的相关知识,脉络如下: 什么是引用 引用的四种基本类型 判断对象已死 垃圾收集算法 HotSpot 的算法实现 垃圾收集器 对象内存分配与回收策略 二、什么是引用 引用可用于判断对象是否存活,所以想要了解 GC,那么对于引用的了解必不可少,要知道什么是对象,我们还得先了解一下什么是对象? 我们都知道,...

Marck的博客 367

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

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

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

JVM-垃圾回收

什么是垃圾 垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。 关于垃圾收集有三个经典问题: 哪些内存需要回收? 什么时候回收?如何回收? 垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然在不断的演进中,不同大小的设备、不同特征的应用场景,对垃圾收集提出了新的挑战,这当然也是面试的热点。 垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要

想握住此生辽阔 343

visio安装包

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

jvm maxgcpausemillis 默认值_JVM内存分配和垃圾回收

本文转载于 SegmentFault 社区作者:P_Chou水冗内存分布对象一般在堆上分配,但JVM支持一种在栈上分配内存的机制。通过-XX:+DoEscapeAnalysis开启逃逸分析(默认开启),JVM会针对不会逃逸的对象分配在栈上。好处是,栈可以自动弹出,不需要垃圾回收参与处理这些对象。此外TLAB(Thread Local Allocation Buffer)是一个线程独占的堆...

weixin_39758712的博客 1577

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

《Understanding the JVM》读书笔记之二——垃圾回收算法

《Understanding the JVM》读书笔记之二——垃圾回收算法 垃圾收集器工作的第一步就是判断对象是否还活着,通过垃圾回收算法判断。 一、引用计数算法 • 在对象A中添加一个引用计数器,当有一个地方引用A时,计数器+1;当引用失效时,计数器-1,任何时刻计数器数值为0时,这个对象就不会再被使用了;   • 引用计数法的实现简单,判断效率高。但再主流的java虚拟机中没有使用此算法,原因是,它无法解决相互循环引用问题。 二、可达性分析算法:(不可达意味着对象死亡的可能性高) 通过一系列GC ro

qq_43408971的博客 223

读书笔记之JVM垃圾回收

前言​ 如果要问Java与其他编程语言最大的不同是什么,我第一个想到的一定就是Java所运行的JVM所自带的自动垃圾回收机制,以下是我学习JVM垃圾回收机制整理的笔记,希望能对读者有一些帮助。哪些内存需要回收?what?​ 如何判断对象已死?有两种算法引用计数算法​ 给对象添加一个计数器,每当有一个地方引用它时,计数器的值就加一,当引用失效的时候,计数器就减一 ,任何时刻计数器为0的对象

gotobat的博客 381

Java的垃圾回收算法

这是篇读书笔记,来自《Thinking In Java 4TH》第五章“Initialization & Cleanup”的“How a garbage collector works”这一小节(具体详见P178),为了给自己加深印象,做个笔记。由于这本书是2007出版的,所以这里的垃圾回收算法主要是学习参考用,不是对当前最新JVM的GC学习。 我们很容易认为Java在堆上为所有对象分配空间

SouthPark的专栏 857

读书笔记整理之JVM垃圾回收

前言 ​ 如果要问Java与其他编程语言最大的不同是什么,我第一个想到的一定就是Java所运行的JVM所自带的自动垃圾回收机制,以下是我学习JVM垃圾回收机制整理的笔记,希望能对读者有一些帮助。 哪些内存需要回收?what? ​ 如何判断对象已死?有两种算法 引用计数算法 ​ 给对象添加一个计...

chongmi9385的博客 121

JVM进阶调优系列(10)敢向stop the world喊卡的G1垃圾回收器 | 有必要讲透

深入浅出剖析G1的核心原理,并通过画图、结合实际应用案例参数分享G1的核心思想,以及GC过程。

拉丁解牛技术专栏 1251

深入理解Java虚拟机 -- 读书笔记(2):常用垃圾回收算法

本系列为《深入理解Java虚拟机 》(周志明著)读书笔记 垃圾回收的核心问题有三个:(1)回收哪些内存 (2)何时回收 (3)如何回收 在Java中,需要回收的内存区域包括堆和方法区。方法区在Hotspot中又被称为“永生代”,主要收集这两方面的内容:废弃常量和无用的类。废弃常量比较容易理解,例如常量区存在“abc”的字符串常量,当系统中没有任何String指向“abc”时,则“a

jubincn的专栏 1971

jvm垃圾回收机制原理读书笔记

可达性分析 主要是用来解决哪些对象是不可用的,可以被回收。 以一系列称为GC Roots的对象为起点,若对象到GC Roots之间没有任何引用关系,则认为该对象是不可用的,可以被回收. 具体可作为GC Roots的对象如下(不是全部): **所有Java线程中当前栈帧的引用(例如局部变量),也就是活着的线程,**这个就是我们通常意义上Java代码new一个对象引用,这个对象引用所在的地方. 所有ClassLoader 所有全局变量 对于classloader和全局变量,因为其一定伴随着应用的整个生命

huangsky001的博客 235

JAVA垃圾回收-(读书笔记)

何时回收-对象生死判定 1.引用计数算法:跪一个对象加一个引用计数器,每当有一个地方应用它,计数器+1;当应用失效,计数器-1,计数器为0的对象就是不可能被使用的(目前主流的java虚拟机都没有使用它来管理内存,只要是它很难解决对象之间互相循环应用的问题) 2.可达性分析算法来判定对象是否存活的: 通过一系列的称为 GC Roots 的对象作为起点, 然后向下搜索; 搜索所走过的路径称为引用链/R...

青龙小码农 247

《深入理解java虚拟机》读书笔记(2)- JVM垃圾回收与内存分配

《深入理解java虚拟机》读书笔记(2)- JVM垃圾回收与内存分配 文章目录《深入理解java虚拟机》读书笔记(2)- JVM垃圾回收与内存分配前言一、对象能被回收的条件是什么1. 引用计数算法(JVM没有采用此方法)2. 可达性分析总结 前言 面向的读者: 有一定java基础 想系统学习JVM基础知识 文章目的: 自己读书笔记 精炼知识点,实现输入输出闭环 一、对象能被回收的条件是什么 一个对象是否能被回收,需要做出精确的判断。这个是对象回收的必要条件。JVM有自己的一套体系来产生这个条件。简单

masternick的专栏 218

【理解JVM】深入浅出JVM垃圾收集(HotSpot)

引言:我的上一篇博文提到JVM运行时的内存分块和GC的基本思想及算法,在GC的道路上越走越远,接下来要做的就是 深入浅出JVM的垃圾收集机制。一、分代垃圾回收1、新生代:大部分刚被创建的对象被分配到这里,生命周期短,被创建后很快变成不可达。在新生代区域内发生的GC称为minor GC。新生代被划分为三个区域: 1个Eden空间 2个Survivor空间 在节点拷贝法中,不会简单的将内存划分为1:1的

mxm691292118的博客 3078
上一篇: Java内存区域——JVM读书笔记<一>
下一篇: Spring事务管理学习笔记
Hooting
博客等级 码龄17年 11粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值