JVM—垃圾回收

发布时间:2024年01月24日

? 什么是垃圾????????

???? 一个没有被任何引用的对象就是一个垃圾对象,

???? 垃圾对象需要被清理回收,否则一直占用内存空间,

???? 其他新对象无法使用垃圾对象空间,

????? 严重的话会造成内存溢出

?? 早期的垃圾回收:

????? 早期例如c/c++是需要程序员手动在程序对不再使用的对象进行删除释放.

????? 给程序员造成了繁重的工作量,

????? 万一忘记回收, 会造成内存泄漏.?????????

? 现在的语言基本都是自动垃圾回收,解放了程序员

垃圾回收的区域

???? 垃圾回收涉及堆,方法区

?重点是堆

频繁回收新生代

较少回收老年代(频率低)

?较少回收方法区

内存溢出与内存泄漏

? 内存溢出

???? 经过垃圾回收后,内存依然不够使用,导致程序崩溃

? 内存泄漏

????? 一个对象在程序中不会被使用,但是垃圾收集器又不能回收.

? 一直会占用着内存空间, 久而久之也是造成内存溢出的原因之一

?? 例如:

??????????? 单例模式中单例对象,整个程序中使用一个唯一的对象、数据库连接对象、Socket?、IO等对象,使用完毕后应该close 关闭资源,如果不关闭,回收器无法回收这些对象.

?? STW(stop the world)

?? 当垃圾回收时(标记,回收),会导致其他用户线程暂停.

?? 必须保证分析时其他程序不再运行,保证分析准确性

垃圾回收算法

标记阶段

? ?目的:标记出哪些对象是垃圾对象

算法

?? 引用计数算法(没有被使用)

???? 在对象中有一个计数属性,只要有引用指向该对象,计数器加1

?计数器值如果为0,则表示此对象是垃圾对象.

?优点:实现简单

?缺点:

?? 计数器占用空间

?? 加一 减一需要时间开销

?? 无法解决循环引用问题

可达性分析算法

????? 从一些活跃对象开始(GCRoots)搜索,与根对象相关联的对象都是被使用的

? 与根对象或者根对象相关的引用链不相关的对象,就称为垃圾对象.

哪些对象可以被称为根对象:

? 1.虚拟机栈中(正在运行的方法)被引用的对象

? 2.类中静态属性

? 3.被用来当做同步锁

? 4.java系统中的类

????? 对象的finalize()方法????

??????? Object类中?????????

?? ????????????????protected void finalize() throws Throwable { }

在对象被回收前,可以在此方法中执行一些需要的逻辑.

当对象被判定为垃圾,在回收之前会调用finalize(),

而且finalize()方法只会被调用一次.

finalize()不需要自己调用,由垃圾回收期调用.

由于finalize()存在

对象可以分为:

?? 可触及的: 不是垃圾对象

?? 可复活的: 被标记为垃圾对象,但是finalize()还没有被调用

?? 不可触及的: 被标记为垃圾对象,finalize()已经被调用过了.

?? ?回收阶段算法

? 标记-复制算法

可以有多块内存,每次有一块是空闲的,

将存活的对象移动到未被使用的空间中,清除其他块中所有的垃圾对象

好处: 内存碎片少

适合存活对象小,垃圾对象多的场景(新生代回收)

? 标记-清除算法

将存活对象位置不变的,将垃圾对象地址记录在一个空闲列表中,

后面如果创建新的对象,就会将空闲列表中垃圾对象覆盖掉.

不移动对象,适合老年代回收,

回收后,会产生内存碎片?

效率高

? 标记-压缩算法

将存活对象重新进行排列,排列到内存一端,将其他区域空间进行清理

进行标记 - 清除 -压缩

移动对象,适合老年代回收

回收后,进来压缩, 不会产生内存碎片?

效率低

?? 分代收集:

根据不同的区域特点进行各自的回收

年轻代,对象生命周期短,存活对象少,回收频繁,采用复制算法

老年代,对象生命周期长,存活对象多,回收频率低,

可以采用清除和压缩两种算法混合使用.

垃圾回收器:

??????? 垃圾回收算法是理论,垃圾回收器是真正进行回收的实践者,

??????? 不同厂商,不同版本各自实现方式都有不同.

垃圾回收器分类:
从线程数量上分:

??单线程: 适用于一些小的设备,只有一个线程进行垃圾回收

? 多线程: 有多个线程进行垃圾回收??

按照工作模式分:

?? 独占式: 垃圾回收线程执行时,其他用户线程暂停执行

?? 并发式: 垃圾回收线程可以和用户线程同时执行

按工作的内存区间分:

??年轻代垃圾回收器

?老年代垃圾回收器

文章来源:https://blog.csdn.net/weixin_63541561/article/details/135764636
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。