Java的垃圾回收机制总结

本文详细介绍了Java垃圾回收机制的特点及工作原理,包括其如何自动管理内存,避免内存泄漏等问题,同时也探讨了垃圾回收机制的优点与潜在缺点。

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

最近看到、以及听到有关Java垃圾回收机制的问题,同学对此还有被面试官问到过。需要详细的总结一下了:

传统的C/C++等编程语言需要显示的进行垃圾回收,比如在用malloc函数的时候,当不在需要有malloc分配的内存时,需要用free函数,进行释放。将内存池中的空间释放,以备后来继续使用。

分析一下这样做的缺点:

1、程序员忘记回收,随着程序的运行,内存占用越来越大,从而降低系统的性能,从导致内存泄漏。

2、错误的回收了程序的核心库,导致系统崩溃。

通过这两个缺点,估计就能猜到java回收机制所要解决的问题了吧。


先说一下垃圾回收机制的概念:

java语言不需要程序员直接控制内存的回收利用,java程序的内存分配和回收都是有JRE在后台自动进行的。JRE会负责回收那些不再使用的内存,比如说没有引用的对象等。这种机制叫做垃圾回收机制。


更详细的来说,通常JRE会提供一个后台线程来进行检测和控制,一般都是在CPU空闲或者内存不足时自动进行垃圾回收,需要明白的是:你无法精确的知道它是什么时候开始执行垃圾回收的。


在java虚拟机的堆内存中,存储着正在运行的应用程序所建立的所有对象,这些对象的建立之后,不需要程序去显示的释放,换句话说,它的回收工作有垃圾回收来负责,会自动的,不定时的来按照特定的算法实现内存资源的自动回收功能。在java中,当没有引用变量指向原先分配给某个对象的内存时,该内存便成为了垃圾,JVM的一个超级线程会自动释放该内存区。


除了释放没用的对象外,垃圾回收也可以清除内存记录碎片。由于创建对象和垃圾回收器释放丢弃对象所占用的内存空间,内存会出现碎片。碎片是分配给对象的内存块之间的空闲内存区,碎片整理将所占用的堆内存移到堆的另一端,JVN将整理的内存分配给新的对象。


以上就是java的垃圾回收机制,具有如下两个显著优点:

1、垃圾回收机制可以很好的提高编程效率。

2、垃圾回收机制保护程序的完整性,是Java语言安全策略的一个重要部分。


潜在的缺点是:

它的开销影响程序性能,java虚拟机必须跟踪程序中有用的对象,才可以确定哪些对象是无用的对象,并最终释放这些无用的对象。


任何一种垃圾回收机制算法,一般要做到两件事情:

1、发现无用的对象

2、回收被无用对象所占用的内存空间,使该空间可被程序再次使用。


通常,垃圾回收有如下几个特点:

1、垃圾回收,只能回收一些内存资源,对其他的物理资源、如数据库的连接,文件的控制等,无能为力。

2、为了更快的让垃圾回收机制回收那些不再使用的对象,可以将该对象的引用变量设置为null,通过这种方式暗示垃圾回收机制可以回收该对象。

3、垃圾回收发生的不可预知性,无法准确的知道它什么时候开始回收。程序可以通过Runtime对象的gc和System.gc方法建议系统进行垃圾回收,但这只是建议,依然不能精确的控制垃圾回收机制的执行。

4、垃圾回收的精确性包括两个方面:一是,垃圾回收机制能够精确的标记活着的对象;二是,垃圾回收器能够精确的定位对象之间的引用关系。


在我们进行java编程的时候,一个基本的原则就是,对于不在需要的对象,不要再引用它们。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

在路上0616

随缘吧打赏与否还是会坚持

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

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

打赏作者

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

抵扣说明:

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

余额充值