admin 管理员组文章数量: 1184232
GC
GC-序
GC要做的就两件事:
- 找到内存空间里的垃圾
- 回收垃圾,让程序员能再次利用这部分空间
GC历史:
- GC标记-清除算法
- 引用计数法:有个缺点不能回收“循环引用”
- GC复制算法:把内存分为两部分
50年来,GC的根本都没有改变,现在的GC算法大多是从上述的三个基本算法衍生出来的产物。
要注意的是,GC基本上是高负载处理,需要花费一定的时间,对于追求即时性的程序,就必须尽量压低GC导致的最大暂停时间。
对象/头/域:
在面向对象编程,对象是指“具有属性和行为的事物“,然而在GC的世界中,对象表示:”通过应用程序利的数据的集合“。
对象配置在内存空间里,GC根据情况将配置好的对象进行移动或销毁操作。所以对象是GC的基本单位。
对象有头和域两部分构成,头是对象的一些元数据,域是指对象使用这在对象中可访问的部分。
对象的使用者会引用或替换对象的阈值;对象的使用者,基本上无法直接更改头的信息,这部分是有系统或编程语言操作的。
疑问,如何管理对象所占用的内存的,也就是对象是要占用元数据的,而原生支持的数据类型,如int,数组,是在对象的域上操作的,所以我们操作的都是域,无论c过程型,或者oo的。
分块:是利用对象,实现准备出来的空间
根: 对象指针的起点
对象指针,怎么连起来的,域中引用。。。也就是没回都需要遍历搜索,即dfs,另外bitmap中对象地址是顺序的,所以可用bitmap管理。
堆:就是动态存放对象的内存空间,跟数据结构的堆不是一个东西,其本意就是一堆内存。
mutator:改变GC对象间的引用关系。主要有生成对象、更新指针两个操作。伴随着这些引用关系的变化,就可能产生垃圾,而GC就是负责处理这些垃圾的。
本文标签: GC
版权声明:本文标题:GC 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.roclinux.cn/b/1688020023a169565.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论