美文网首页
关于JVM的垃圾收集(1)

关于JVM的垃圾收集(1)

作者: 李天火 | 来源:发表于2021-05-28 23:49 被阅读0次

前言

在java中,存在大量的设计概念,在概念中衍生出了很多理论基础,这类的学习对其他语言的深入理解有很大的帮助,因为本身java就是一个很大的知识库,于是,在飞机上,抽空下载了《深入理解JAVA虚拟机》,并学习了其中几张,发现了很多知识点在之前学习Golang时常常是没有提及的,也坚定了后续继续深入阅读java书籍的目标。

关于垃圾收集

垃圾收集主要还是针对堆内存中的对象,因为在栈中的对象,是随着线程的执行,会自动消逝,而堆中的对象,则是没有维护上级,对于C、C++来说,需要开发者自身通过free方法来释放,也衍生出了内存池的概念,而在更多编程语言中,例如最初的lisp、近期的golang,为了开发效率,不再提倡手动维护这类对象,而且交由应用程序运行时来管理对象的生命周期,这样也可以避免出现大量对象释放后,导致进程core的bug。

而在整体的垃圾收集算法中,核心还是,如何判断一个对象是否已死?最初的死亡定义是:当一个对象不再有另一个对象引用时,便认为其已死亡。这样也就衍生出引用计数算法,这类算法在最初的PHP有实现,包括在redis中也是有简易的实现。该算法原理简单,效率高,对于简单场景是十分适用,但是该算法并解决不了最困难的问题:循环引用。

所谓循环引用,就是2个对象互相引用,但是不在被其他对象引用,按理说,这类孤岛对象,算是僵尸对象,有人引用,但是不会再被使用,所以也应该被当做垃圾清理。而针对这类case,也衍生出了可达性分析算法,通过一个GC Roots的根对象来进行广度优先搜索,最终判断对象是否可达。这样也就可以解决循环引用的问题,而针对可达性分析算法,也衍生出各种各样的实现,其中也就包括golang的三色标记、php的n色标记、java的分代算法。

分代垃圾收集算法

分代收集的核心理论是建立2个假说:

1)弱分代假说(Weak Generational Hypothesis):绝大多数对象都是朝生夕灭的。

2)强分代假说(Strong Generational Hypothesis):熬过越多次垃圾收集过程的对象就越难以消亡。

因此,在java中,会分开新生代和老年代2块区域,针对新生代而言,大部分的对象都在垃圾收集时直接消亡,而剩余的对象逐步晋升为老年代中。这样就可以针对新生代和老年代进行分别垃圾清理。但中间还存在一个问题是当一个新生代对象被老年代引用时,原本只需要在新生代做垃圾收集算法,却必须要同时对老年代进行,这样完全没有达到分代的效果。于是,又引入了一个假说:

3)跨代引用假说(Intergenerational Reference Hypothesis):跨代引用相对于同代引用来说仅占极少数。

即存在互相引用的2个对象,最终肯定是同时生存、死亡,所以,应该同时晋升为老年代,这样跨代的问题便消失了。

相关文章

  • 关于JVM的垃圾收集(1)

    前言 在java中,存在大量的设计概念,在概念中衍生出了很多理论基础,这类的学习对其他语言的深入理解有很大的帮助,...

  • Jvm之CMS垃圾收集器

      这篇文章主要介绍JVM的CMS垃圾收集器,以及JVM提供的垃圾收集算法。 一、垃圾收集算法   JVM提供的三...

  • JVM学习笔记(3)-垃圾收集算法

    JVM学习笔记(1)-内存管理机制 JVM学习笔记(2)-内存分配与回收 垃圾收集算法 JVM垃圾收集算法有四种:...

  • G1收集器详解

    详解 JVM Garbage First(G1) 垃圾收集器 G1垃圾收集器入门

  • JVM

    JVM(1):Java 类的加载机制 JVM(2):JVM内存结构 JVM(3):Java GC算法 垃圾收集器 ...

  • JVM源码分析系列

    JVM G1算法系列 G1垃圾收集器介绍 G1垃圾收集器之RSet G1垃圾收集器之SATB G1垃圾收集器之对象...

  • 面试官:你对JVM垃圾收集器了解吗?13连问你是否抗的住!

    关于JVM垃圾收集器的面试题 1、简述Java垃圾回收机制 2、GC是什么?为什么要GC 3、垃圾回收的优点和原理...

  • 常见面试题

    JVM JVM 内存结构 垃圾收集策略与算法记回收,标记清除,复制算法 HotSpot 垃圾收集器 cms hos...

  • JVM的垃圾回收机制详解和调优

    JVM的垃圾回收机制详解和调优 1.JVM的gc概述 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占...

  • 【JVM篇】【垃圾回收机制】

    【JAVA】【JVM篇】【垃圾回收机制】 1. 概述: 垃圾收集GC(Garbage Collection)是Ja...

网友评论

      本文标题:关于JVM的垃圾收集(1)

      本文链接:https://www.haomeiwen.com/subject/emwesltx.html