【深入理解JVM 七】JVM垃圾回收机制

本文深入探讨了JVM的垃圾回收机制,包括垃圾回收的范围、时机和方式。主要内容涉及Java堆和方法区的回收,特别是1.8之后的变化。文章详细解释了可达性分析算法、引用计数法和可达性分析算法的区别,以及Hotspot虚拟机的实现细节。此外,还介绍了四种类型的引用,以及方法区的废弃常量和无用类的回收。垃圾回收算法方面,讨论了标记清除、标记整理、复制和分代收集算法,并分析了Minor GC和Full GC的触发条件。最后,文章提到了各种垃圾收集器,如Serial、Parallel Scavenge、Parallel Old和CMS,以及G1收集器的特性,强调了垃圾回收器的选择应根据应用需求来定。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前边几篇Blog分别介绍了JVM的类加载机制、运行时数据区域,字节码的执行,在执行完成后程序发挥完了自己的作用,线程独有的程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭,而线程共享的堆和方法区却不可以,需要进行垃圾回收,这就用到了我们的JVM垃圾回收机制。
在这里插入图片描述

垃圾回收机制

首先提出三个问题:1,哪些内存需要回收? 2,什么时候回收? 3,如何回收?基于这三个问题分别详细展开进行介绍。

垃圾回收范围

回收区域在JDK1.8之前主要集中在Java堆和方法区

  • 程序计数器、虚拟机栈、本地方法栈3个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出而有条不紊地执行着出栈和入栈操作。每一个栈帧中分配多少内存基本上是在类结构确定下来时就已知的,因此这几个区域的内存分配和回收都具备确定性,所以不需要考虑回收
  • Java堆和方法区则不一样,一个接口中的多个实现类需要的内存可能不一样,一个方法中的多个分支需要的内存也可能不一样,我们只有在程序处于运行期间时才能知道会创建哪些对象,这部分内存的分配和回收都是动态的,垃圾收集器所关注的是这部分内存

在Java8之前有永久代的概念,在堆中实现方法区,受GC的管理,主要存储类的信息,常量,静态变量,由于永久代有 -XX:MaxPermSi

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

存在morning

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值