讲讲java中垃圾回收GC和清除

在java中什么是垃圾?

一般来讲清除垃圾在java中只有三种方式,并且从计算机发明至今都没有改变过。
1.Mark-Sweep标点清除
2.Copying 拷贝
3.Mark-Compact 标点压缩
首先是标点清除(Mark-Sweep),就是在内存中做个标记,定点清除,但是这种方式有个毛病(我们清着清着就会造成内存的一个碎片化,时间一长的话碎片化的内存就装不下很大的对象了)

其次是拷贝算法(Copying ),无论你有多大内存,全部一分为二,所有的对象所有的东西都在一半的空间中运行,如果要进行垃圾回收,先统计有用的对象,带着这些对象拷贝到另一半内存中,之前那一半内存一下子全部清掉。这种方式效率非常高,对内存的速度非常的快,当然它最大的毛病在与非常的浪费空间,别管你内存多大,反正你一半内存用不了。

最后就是标记整理(Mark-Compact),它就是标点清理完后再进行整理,不会出现内存的碎片化,当然缺点就是效率太慢了,出现一个空缺内存块就要进行整理一次。

什么是垃圾回收器

垃圾回收器,在c#和c中的垃圾是需要手动回收的,而java的话是不需要的,java有专门的垃圾回收处理。首先就得知道什么是垃圾,简单来讲就是一个对象,没有任何对象或者方法指向它,跟它有关联或者是没有引用指向的,这就叫做垃圾。

但是还有个问题如果说A指向B,B指向C,C又指向了A,这叫做循环指向,要明白这种方式的话它们都有引用指向对吧。每个对象都被其他对象引用,但是这哥仨不被其他对象所引用,所以这哥仨是一陀垃圾,

当然还有其他方式,“ **跟可达算法 **” 它是根据main方法来判断对象是否为垃圾的,只要是在main方法运行的方法,把这些方法的对象串成一根线,只要在线上的都不是垃圾。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值