程序地带

jvm的垃圾回收核心概念总结


背景
什么是垃圾?如何定位垃圾?有哪些垃圾回收算法?垃圾回收器及其工作过程?
过程
垃圾 Student对象,持有一个Computer对象的引用。在这里插入图片描述如果在程序中执行了这样的一条语句,computer = null, 变成如下情况在这里插入图片描述如果一个对象不再被使用了,也就是对象没有被引用了,就成垃圾了。定位垃圾
引用计数算法,当一个对象被引用一次,此对象被引用的次数就加一。当对象不在被引用的时候,就会被认定为垃圾。但是,存在循环引用问题,导致全是垃圾,但是又都存在引用记录数。根可达算法,从根对象(虚拟机栈变量,静态变量,常量池,JNI指针)开始,一层一层往下找,能找的就不是垃圾。找不到的就是垃圾。解决了,引用计数带来的问题。
常见垃圾收集器回收算法 垃圾收集器具体实现过程,就是灵活组合如下三种算法
拷贝算法(Copying) 缺陷:空间浪费。把空间一分为二(分成两部分)。从一部分拷贝到另一部分。 优点:效率最高。空间换时间。标记清除算法(Mark-Sweep) 缺陷:会产生碎片。物理内存地址不连续了。工作过程就是:是垃圾的对象,直接回收即可。 优点:空间不浪费,效率也还行。标记压缩算法(Mark-Compact) 缺陷:效率低。挪动对象,清除对象,压缩。 优点:内存地址连续
垃圾回收器及工作过程 在这里插入图片描述
ParNew与CMS配合使用。ParNew是年轻代的垃圾回收器。CMS是老年代的垃圾回收器。物理分代。Serial与Serial Old配合使用。Serial是年轻代的垃圾回收器。Serial Old是老年代的垃圾回收器。物理分代。Parellel Scavenge与Parellel Old配合使用。Parellel Scavenge是年轻代的垃圾回收器。Parellel Old是老年代的垃圾回收器。物理分代。G1是逻辑分代,物理不分代。都存在Stop-the-worldSerial是单个线程进行垃圾回收,适用与内存空间较小的场景。Parellel是多个线程进行垃圾回收,适用于内存空间比较大的场景。CMS是业务线程和垃圾回收线程一起工作的。因此,满足于几乎不发生卡顿的业务场景,但是CMS不是绝对不发生卡顿现象的,只是发生的概率较小而已。
小结
理解java中的垃圾,及其定位算法。理解常见垃圾回收算法,及垃圾收集器本身由哪些垃圾收集算法组合运用而实现的。加深对jvm的垃圾回收机制的理解,有助于对java本身运作过程的理解。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/outsanding/article/details/111246397

随机推荐

Java设计模式——观察者模式

Java设计模式——观察者模式

Java设计模式——观察者模式观察者模式定义结构类图实现过程优点缺点一些理解观察者模式定义定义对象之间的一种一对多的依赖关系,使得每当一个对象状态发生改变时其相关依赖对象皆得到通知并被自...

hzx99 阅读(914)

数据库视频第四章 数据表管理

字段的数据类型①数字数据类型1、整数型int,bigint,smallint,tinyint2、高精度小数类型decimal和numeric3、货币存储类型money和smallmoney4、浮点数据...

阿仇_Parsifal 阅读(302)

tensorflow-gpu == 2.0.0-beta1安装说明

1、安装步骤说明创建环境condacreate-nTF2.0python=3.7激活环境condaactivateTF2.0安装cudatoolkitcondainstallcudatoolk...

xgxg1314 阅读(162)

arcgis导入excel数据_10w行级别数据的Excel导入优化记录

arcgis导入excel数据_10w行级别数据的Excel导入优化记录

需求说明项目中有一个Excel导入的需求:缴费记录导入由实施/用户将别的系统的数据填入我们系统中的Excel模板,应用将文件内容读取、校对、转换之后产生欠费数据、票据、票据...

weixin_39799307 阅读(725)

python 模拟实现SSH

客户端:#coding:utf-8importsocket,timehost='localhost'port=50007s=socket.sock...

minoboy 阅读(193)

计算机网络实验(Cisco Packet Tracer 实验)

计算机网络实验(Cisco Packet Tracer 实验)

目录一、直接连接两台PC构建LAN二、用交换机构建LAN三、交换机接口地址列表四、生成树协议(SpanningTreeProtocol)五、路由器配置初步六、静态路由八、动...

头发越少学习越好 阅读(311)

攻防世界 Crypto高手进阶区 5分题 x_xor_md5

前言继续ctf的旅程攻防世界Crypto高手进阶区的5分题本篇是x_xor_md5的writeup发现攻防世界的题目分数是动态的就仅以做题时的分数为准了解题过程题目描述得到一个无后缀文件扔进winhe...

思源湖的鱼 阅读(186)

python练习------京牌车牌摇号

京牌车牌摇号importrandomimportstringi=0count=0whilei<3:forjinrange(4):car_nums=[]#存储可供用户选择的...

jaray 阅读(497)