GC回收机制

1.什么是GC,为什么要有GC?

GC(Gabage Collection)就是程序中的垃圾回收。因为我们在开发中会创建大量的对象,会占据堆空间,如果不回收就会造成内存泄漏。所以,我们要有GC来释放掉没用的对象。

2.简单说一下垃圾回收机制

不同生命周期采用不同的算法
Java采用分代回收,分为年轻代、老年代、永久代。
(1)年轻代:所有新生成的对象都是放在年轻代中,年轻代的目的就是尽可能快速的手机掉那些生命周期短的对象。年轻代分为E区(Eden)、S0区(Survivor0)、S1区(Survivor1)。
(2)老年代:当对象在年轻代经过多次垃圾回收后仍存活后,会被放到老年代。可以说,老年代存活的都是一些生命周期比较长的对象。
(3)永久代:用于存放Java类,方法等。但是在Jdk1.8后,就没有了永久代这个概念。

3.常用的垃圾回收算法有哪些?

复制(Serial收集器)、标记整理(Serial Old收集器)、标记清除(CMS收集器)

4.为什么要是用分代回收机制?

因为没有一种算法适用于所有对象
当对象存活率低时,用复制算法最合适。
当对象存活率高时,用标记整理或标记清除最合适。

5.如何判对一个对象是否存活?

现在主流的都是使用可行性分析法,从GC Roots计算引用链,能链上的对象就是存活的。

6.如果对象的被引用被置为null,垃圾收集器是否会立即释放对象占用的内存?

不会。对象回收需要一个过程,这个过程中对象还能复活,而且垃圾回收具有不确定性,指不定什么时候开始回收。

7.什么是内存泄漏和内存溢出?

(1)内存泄漏:是指程序申请内存后,无法释放已申请的内存空间。一次内存泄漏不会有多大问题,但是多次内存泄漏就会造成内存溢出。
(2)内存溢出:指程序申请内存时,没有足够的内存供申请者使用。或者说,给了你一块存储int类型数据的存储空间,结果你却存储long类型的数据,这样也会报内存溢出。

通俗的说就是停车场(堆)保安(gc)让很久不用的废弃车子(无用的对象)从车位上挪走,但是这个车子又没办法挪走。这就是内存泄漏
停车场所有的车位都有车子占用了,再来车子没地了,或者说给你一个小汽车的停车位(int),你非要停一辆高铁(Long),这就是内存溢出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值