Java中的垃圾回收机制是什么?哪些对象会被回收?

(1)问题分析:

什么样的对象会被当做垃圾回收?

如何校验对象是否被回收?

怎样通知垃圾回收器回收对象

(2)核心答案讲解:

1)问题 : 什么样的对象会被当做垃圾回收?

当一个对象的引用(地址)没有变量去记录的时候, 该对象就会成为垃圾对象, 并在垃圾回收器空闲的时候对其进行清扫.

2)问题 : 如何校验对象是否被回收?

可以重写Object类中的finalize方法

这个方法在垃圾回收器执行的时候, 被回收器自动调用执行的.

3)问题 : 怎样通知垃圾回收器回收对象

可以调用System类的静态方法gc( );

通知垃圾回收器去清理垃圾

(3)问题扩展:

如何判断哪些对象需要回收呢?

1)引用计数算法(java中不是使用此方法)

每个对象中添加一个引用计数器,当有别人引用它的时候,计数器就会加1,当别人不引用它的时候,计数器就会减1,当计数器为0的时候对象就可以当成垃圾。算法简单,但是最大问题就是在循环引用的时候不能够正确把对象当成垃圾。

publicclassDemo1_Gc{publicstaticvoidmain(String[] args){Demo object1 =newDemo();Demo object2 =newDemo();

         object1.object = object2;
         object2.object = object1;

         object1 =null;
         object2 =null;}}

2)根搜索方法

这是JVM一般使用的算法, 根搜索算法是从离散数学中的图论引入的,程序把所有的引用关系看作一张图,从一个节点GC ROOT开始,寻找对应的引用节点,找到这个节点以后,继续寻找这个节点的引用节点,当所有的引用节点寻找完毕之后,剩余的节点则被认为是没有被引用到的节点,即无用的节点

(4)结合项目中使用:

1)尽量不要创建很大的对象

原因 : GC回收算法从来不对大对象(>=85000字节)堆进行内存压缩整理,在堆中大的内存块会浪费太多CPU时间

2)不要频繁的new生命周期很短的对象

这样频繁垃圾回收频繁压缩有可能会导致很多内存碎片

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值