什么是GC,为什么要有GC?

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/28 06:23:42
什么是GC,为什么要有GC?
xTR@L>w3}u &"`B"C~f_.ˠҾ0={ }4؋@cDQ—o{*;/`x( bU!J- rG^?Y$mDIwx1v!ula%$VlyE9&n~o-Sxcӈ(n[C~e)+3S}S^o38c{ƛ/!(`} NOϺ.!QG0k)[*i (bbE8ë!KjX*Cv%QD-pZܽi`꛸&,VF7R?HE50PhhuQ&Y*o'dO[)|򃷝y :gnGjHhm/))v퍝U➪Թ7hNTlQ:*u4*>+.Z”C SZCx*4Ħ+TCڗN7}S

什么是GC,为什么要有GC?
什么是GC,为什么要有GC?

什么是GC,为什么要有GC?
一个跟踪过程,它传递性地跟踪指向当前使用的对象的所有指针,以便找到可以引用的所有对象,然后重新使用在此跟踪过程中未找到的任何堆内存.公共语言运行库垃圾回收器还压缩使用中的内存,以缩小堆所需要的工作空间
在进行垃圾回收时,垃圾回收器回首先搜索内存中的托管对象,然后从托管代码中搜索被引用的对象并标记为有效,接着释放没有被标记为有效的对象并收回内存,最后整理内存将有效对象挪动到一起.这就是GC的四个步骤.
由上可见,GC是很影响性能的,所以一般说来这种事情况还是尽量少发生为好.
为了减少一些性能影响,.net的GC支持对象老化,或者说分代的概念,代是对象在内存中相对存现时期的度量单位,对象的代数或存现时期说明对象所属的代.目前.net的垃圾回收器支持三代.每进行一次GC,没有被回收的对象就自动提升一代.较近创建的对象属于较新的代,比在应用程序生命周期中较早创建的对象的代数低.最近代中的对象位于零代中.