JVM垃圾回收

本文详细介绍了JVM中的垃圾回收,包括哪些内存区域需要回收,堆区对象的判断标准,如引用计数法和可达性分析法,以及各种垃圾回收算法如标记-清除、复制、标记-整理和分代算法。同时,讨论了垃圾收集器,如Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old和CMS,并强调了如何在项目中进行垃圾回收的调试和监控。

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

1 What:哪些内存区域需要回收

  • 程序计数器,虚拟机栈,本地方法栈随线程而生,随线程而灭。栈中栈帧随着方法的调用和返回自动的入栈和出栈,并且栈帧需要多大在编译期就是可知的。因此这些区域的内存分配和回收是确定的,故不需要GC来参与。

  • 堆:对象和数组基本都在这个区域,是GC的主力

  • 方法区:无用的类型信息和const都是回收的目标,但一般他们是垃圾的概率不大,故这个区域GC的性价比不高

2 What:堆区哪些对象需要被回收

  • 确定哪些对象需要回收

    1. 引用计数法:

      	使用简单,效率很高。但解决不了相互循环引用的问题。Python和其他一些语言采用的这个方法。
      
    2. 可达性分析法:

      	1) 从GC Roots开始,向下搜索节点,搜索的路径就是引用链。不在引用链中的对象就是无用的对象。
      	2) GC Roots:
      		a) JVM栈中引用的对象
      		b) 类static引用,final引用
      		c) 本地方法栈中引用的对象
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

谢杨易

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

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

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

打赏作者

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

抵扣说明:

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

余额充值