垃圾回收算法简介——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版)》

STM32CubeMX实战:FreeRTOS内存管理5种方案全解析(附heap_4避坑指南) 本文深入解析了STM32CubeMX环境下FreeRTOS的5种内存管理方案(heap_1到heap_5),重点介绍了heap_4的优化策略与避坑指南。通过对比分析各方案的特点、性能指标及适用场景,帮助开发者根据项目需求选择最优内存管理策略,提升嵌入式系统开发效率与稳定性。 阅读详情

相关推荐

美亚杯2023参赛全攻略:从检材下载到Veracrypt挂载的保姆级教程

本文提供美亚杯2023电子数据取证竞赛的完整参赛指南,重点解析从检材下载、Veracrypt挂载到实战取证的保姆级流程。针对新手常见误区,详细说明两套密码(ZIP解压密码与Veracrypt挂载密码)的区别与正确使用方法,并分享赛前环境搭建、赛中高效分析及赛后报告撰写的核心技巧,帮助参赛者系统备赛,规避基础错误。

y9z0a1b的博客 1079

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

垃圾收集/回收算法

一个普本码农奋斗史 1990

大厂案例:快手AI人才管理系统的架构设计与效果

凌晨两点刷简历的HR、说不清“团队离职率高”原因的业务leader、不知道“该学什么”的员工——这些人力资源场景中的“痛点”,曾是快手高速增长期的真实写照。当员工规模从几千扩张到几万,传统HR系统的“经验驱动”模式彻底失效。2021年,快手启动AI人才管理系统建设,用“数据+算法”重构招聘、培养、绩效、留存全流程。本文将拆解这套系统的架构设计逻辑核心技术实现,以及真实业务效果AI如何让HR从“事务执行者”变成“战略伙伴”?

大模型应用工坊 1711

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

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

qq_18591859的博客 309

nRF开发环境搭建全攻略:VS Code + nRF Connect SDK + Zephyr实战

嵌入式开发中,环境配置往往是新手入门的第一道障碍,尤其面对基于Zephyr RTOS的Nordic nRF平台时,工具链的复杂度常让人望而却步。理解构建系统、SDK版本管理和调试工具之间的协作关系,是高效开发的前提。Zephyr作为开源实时操作系统,通过设备树和Kconfig实现硬件描述与功能配置,而nRF Connect SDK(NCS)则是Nordic基于Zephyr的增强发行版,两者结合为物联网开发提供了强大支持。基于VS Code搭建开发环境,配合west工具管理多仓库、CMake/Ninja执行构

weixin_29188997的博客 226

用Navicat轻松管理魔兽世界私服数据库:修改IP、添加装备的实用技巧

本文详细介绍了如何使用Navicat管理魔兽世界私服数据库,包括修改服务器IP、添加自定义装备和调整角色属性等实用技巧。通过专业的SQL操作指南,帮助玩家轻松实现私服的高级定制,提升游戏体验。

fanta的博客 939

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

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

905

SystemVue 链路预算、仿真分析步骤

使用SystemVue进行链路预算、频谱分析等,相对ADS更全面。

BeCourageable的博客 3834

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

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

Sid小杰的博客 1429

Vue3 - 完美解决html2canvas截图不全问题,截图只截取当前可视区域导出图片不全,截屏导出的图片显示不全只有一部分或缺一块,vue3移动端H5网页项目使用html2canvas插件长截图!

vue3,html2canvas,移动端H5网页,截图不全,html2canvas长截图不全,保存长截图,页面滚动导致截图不全,网页下方截屏不到怎么办,底部一部分无法截屏到,保存的图片少了一大块,H5海报截图不完整,怎么截取滚动条下方的内容,截图图时图片不全,截图图片只有一半的问题,底部内容空白,截图空白问题的解决,截图不全怎么办,html2canvas.js网页截图功能(解决截图不全问题,移动端ios系统截图不完整,html2canvas截图太长又不能删减截取不到,使用HTML2Canvas在H5页面上实

🏆 前端领域优质创作者 1万+

【图像超分】论文精读:Interpreting Super-Resolution Networks with Local Attribution Maps(LAM)

论文题目:Interpreting Super-Resolution Networks with Local Attribution Maps —— 用局部归因图解释超分辨率网络CVPR 2021!必读文章!必须会的可视化手段!很多文章中都会对比LAM!图像超分辨率 (SR) 技术发展迅速,受益于深度网络的发明及其连续突破。然而,众所周知,深度学习和深度神经网络很难解释。SR网络继承了这种神秘的性质,很少有作品试图理解它们。在本文中,我们对 SR 网络进行了归因分析。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 547

[Java Performance] Java垃圾回收简介

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

不忘初心,好好沉淀 4657

《DeepJIT: An End-To-End Deep Learning Framework for Just-In-Time Defect Prediction》论文笔记

软件工程任务:即时缺陷预测(涉及SE+AI知识)

weixin_43646592的博客 701

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

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

Marck的博客 367

VC中sqlite的使用

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

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

JVM-垃圾回收

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

想握住此生辽阔 343

计算机控制技术及应用

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

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

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

weixin_39758712的博客 1577

《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

JVM读书笔记

内容节选自《深入理解JAVA虚拟机》 1.JVM的内存组成 线程隔离的区域: 程序计数器:管理程序运行的顺序,每一个处理器(核)都会执行一条线程的指令, 各个线程计数器互不影响,独立存储,因此是私有独立的。 虚拟机栈(栈):记录每一个方法从调用到结束的过程,就是一次栈帧的入栈出栈。 因此生命周期与线程一致。 里面包含:局部变量表,数栈,动态链接 局部变量表:八种数据类型以及引用类型(存放...

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

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值