JVM之一--垃圾收集原理

本文深入探讨了Java垃圾回收(GC)的工作原理、优缺点及过程,包括引用计数、跟踪检测方法,以及分代分块回收策略。通过对比分析,阐述了Java在牺牲部分性能的同时,为开发者提供了易于维护的垃圾回收机制。同时,文章介绍了按代回收的思想,即根据对象生命周期的特点,将系统分块处理以提高性能。

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

GC:
GC 工作: 释放不再被引用的对象, 处理堆碎片。
GC 优点: 保持完整性, 把程序员从内存管理中走出来。
GC 缺点: 增加JVM压力, 影响程序性能(把平时做的事情放到一起做), 易维护和性能之间一个平衡。

GC 过程:
垃圾对象检测, 堆空间回收。
垃圾对象检测:
引用计数:对每个实例记录其被应用次数, 如果为0则可回收。缺点: 不能侦测循环引用。优点: 较快(将侦测工作分配到JVM使用过程中)
跟踪:从根对象跟踪, 并标记。缺点: 回收过程中程序会停止, 影响用户使用。 解决方法: 分代分块回收。

对空间回收:
涉及到碎片整理。
压缩收集: 将对象越过空闲区移动到堆的另一端。
拷贝收集: 将堆分成两部分, 将活动对象复制到另外一部分。


按代收集:
为什么? 有很多对象生命周期很短, 有很多对象的生命周期很长。
怎么做: 堆被划分为很多代, 年幼的放在一代, 经常被收集, 年长的放在一代。


学习心得:
1. java相对于c等语言, 相对较高级, 在牺牲性能的基础上编程更加容易, 垃圾回收就是个例子, 因为将所用垃圾操作放在一起会影响性能, 但程序员却不需要编写垃圾回收代码, 降低了对程序员的要求。
2. 有功能弊端的方案不可选(引用计数对象侦测, 虽然性能较好, 但不能检测出循环引用, 所以被抛弃)。
3. 按代回收思想。 根据业务特点(有些对象生命周期短, 有些长)将系统分块化(将堆分成不同代), 对每块进行处理以解决性能问题(每块操作时间较短)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值