java面试总结01_java垃圾回收机制

本文深入解析了五种垃圾回收算法,包括引用计数算法、标记-清除算法、复制算法、标记-整理算法和分代收集算法,重点介绍了它们在不同内存区域的应用,如新生代和老年代。

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

面试时被问到这个问题,看网上很多文字,看了都不知道怎么说,我按照自己的想法总结一下,优缺点在网上百度吧:

开始:

一般情况下将堆区划分为老年代(Tenured Generation)和新生代(Young Generation)新生代可分为eden区和两个survivor区,默认为8:1:1,在堆区之外还有一个代就是永久代(jdk1.8去掉了)(Permanet Generation)。老年代的特点是每次垃圾收集时只有少量对象需要被回收,而新生代的特点是每次垃圾回收时都有大量的对象需要被回收。

垃圾回收主要指的是对内存中和方法区的回收,主要有一下方法:

1.引用计数算法

每个对象有一个引用计数器,当一个地方引用该对象时,计数器+1,当该对象的一个引用失效之后,计数器-1。为0时就意为着该对象已不可能再被使用,会被回收!这个是很早的一个算法。

2.标记-清除算法

从根集合扫描,标记存活的对象进行标记,然后在扫描,把未标记的对象清除掉!这个容易造成内存碎片化。

3.复制算法

简单的说就是把一个堆分成对象区和空闲区,当对象区满了,就扫描对象区中活动的对象,并且将这些活动的对象复制到空闲区,然后清理之前的对象区,之前的对象区变成空闲区,之前的空闲区变成了对象区,解决了内存碎片化问题。

4.标记-整理算法

在标记-清除算法基础上,在清除不可用的对象后,将可用的对象往左移动,这样就解决了碎片化问题,但效率低。

5.分代收集算法(重点)

这个算法是现在大部分用的算法。

它的核心思想是根据对象存活的生命周期将内存划分为若干个不同的区域,那么就可以根据不同代的特点采取最适合的收集算法。

新生代:标记复制算法。因为每次要清理90%以上的垃圾,复制出去的对象少。minor.gc过程

老年代:标记整理算法。因为每次要清理垃圾一般不会超过50%。major.gc

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值