本文主要是介绍由数组引出的gc的标记清除,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
-
首先提出一个问题:为什么数组下标为0,想必大家的都在使用数组,但是在使用的过程中我们总是在质疑为什么数组的下标从零开始?
- 我们通过一个公式来分析一下如果不使用数组下标从零开始的话,我们的k就不会执行-1的操作,这样cpu从底层就会减少一部减法的操作,开发者只为增加一个计算效率。
a[k]_address = base_address + k * type_sizea[k]_address = base_address + (k-1)*type_size
-
数组是什么?
- 数组在存储结构上看来就是一张连续的线性表,所以要求它在内存中是连续的,因为他的这个属性,所以他在检索查询的特别快,而对于增删效率会很慢,而且数组支持随机访问平均的时间复杂度为O(n);对于java开发者来说,用数组的机会一般很少,大部分喜欢使用集合,因为它支持的动态扩容,在java中集合就类似于数组的进一步的封装,让他更加的便捷,列如:ArrayList的add,我们在new他的时候不需要给他什么空间大小,只需给个类型,其他完全交给他自己,空间不够,自己new,对于业务开发非常的方便。
-
为什么由数组我们要引入一个标记清除法这个GC的方式?
- 标记清除使用的是和数组类似的存储模式,连续的存储空间,GC在删除的时候回将这块内存进行标记,当标记完成后,内核回自动对标记的对象进行回收。
- 所以针对这种法式的清除会有不足:对于对象数量多,这种方式的效率并不是太高,其次是这种方式会产生大量的内存碎片。
这篇关于由数组引出的gc的标记清除的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!