由数组引出的gc的标记清除

  • 首先提出一个问题:为什么数组下标为0,想必大家的都在使用数组,但是在使用的过程中我们总是在质疑为什么数组的下标从零开始?

    • 我们通过一个公式来分析一下如果不使用数组下标从零开始的话,我们的k就不会执行-1的操作,这样cpu从底层就会减少一部减法的操作,开发者只为增加一个计算效率。
					a[k]_address = base_address + k * type_size
					
					a[k]_address = base_address + (k-1)*type_size
  • 数组是什么?

    • 数组在存储结构上看来就是一张连续的线性表,所以要求它在内存中是连续的,因为他的这个属性,所以他在检索查询的特别快,而对于增删效率会很慢,而且数组支持随机访问平均的时间复杂度为O(n);对于java开发者来说,用数组的机会一般很少,大部分喜欢使用集合,因为它支持的动态扩容,在java中集合就类似于数组的进一步的封装,让他更加的便捷,列如:ArrayList的add,我们在new他的时候不需要给他什么空间大小,只需给个类型,其他完全交给他自己,空间不够,自己new,对于业务开发非常的方便。
  • 为什么由数组我们要引入一个标记清除法这个GC的方式?

    • 标记清除使用的是和数组类似的存储模式,连续的存储空间,GC在删除的时候回将这块内存进行标记,当标记完成后,内核回自动对标记的对象进行回收。
    • 所以针对这种法式的清除会有不足:对于对象数量多,这种方式的效率并不是太高,其次是这种方式会产生大量的内存碎片。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值