Java虚拟机:垃圾回收机制

98 阅读2分钟

7396ad163c6e46b9ae911cc2e2e5fa13_tplv-k3u1fbpfcp-watermark.webp
本文已参与「新人创作礼」活动,一起开启掘金创作之路。

前言

       在JVM中,垃圾回收是一项非常核心的机制,它会将内存中不再使用的对象回收,以释放被占用的内存。本文将为大家讲解垃圾回收机制的一些基础概念。

判断对象是否存活

  • 引用计数算法

给每个对象添加一个计数器,有其它对象引用它时,就给计数器加1。当计数器为0时,表示该对象不再使用,可被回收。
该算法比较简单,但是它无法解决对象循环引用的问题。

  • 可达性算法

通过一系列的称为GC Roots的对象作为起始点,从这些节点开始向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Roots没有任何引用链相连时,则表示该对象不再使用,可被回收。
该算法解决了对象循环引用的问题。

可作为GC Root的对象

       在可达性算法中,GC Root作为关联起点,起着非常关键的作用,那么,有哪些对象,可以作为GC Root?

  • 虚拟机栈(局部变量表)中引用的对象
  • 方法区中类静态属性引用的对象
  • 方法区中常量池引用的对象
  • 本地方法栈中JNI引用的对象

垃圾回收算法

  • 标记-清除
    • 对“已死”对象进行标记,清除做标记的对象
  • 标记-整理
    • 将存活对象复制到同一边,然后清除边界以外的对象
  • 复制算法
    • 将存储空间分成两部分,将存活对象复制到另外一边,然后清除这边的空间
  • 分年代回收
    • 对年轻代进行复制算法,对老年代进行标记-整理算法

后言

       既然看到这里了,感觉有所收获的朋友,不妨来个大大的点赞吧~~~