+ -
当前位置:首页 → 问答吧 → 问几个GC的问题,高手进!当然非高手也可以进来围观哈!

问几个GC的问题,高手进!当然非高手也可以进来围观哈!

时间:2011-12-26

来源:互联网

1,CLR如何判断对象不可达,可否描叙其判断方式与原理?
2,垃圾回收器如何查找根,如何操作的?
3,第0代垃圾存于CPU L2缓存,那么第1第2代呢?为什么第0代要选择CPU L2而非L1或者其他?

好吧...先了解这些的....有些需要验证,同时看看过来人的见解...

请正面回答问题,谢谢!望高手直切要害....

作者: xx_mm   发布时间: 2011-12-26

真心想了解这个技术困惑,希望高手们赐教,另外把GC这个知识点深刻的掌握下。。也给需要拔高的各位技术迷们...

作者: xx_mm   发布时间: 2011-12-26

关注与学习

作者: jsyhello   发布时间: 2011-12-26

引用 2 楼 jsyhello 的回复:

关注与学习
谢谢!

作者: xx_mm   发布时间: 2011-12-26

这。。 高级啊。

作者: huyaogood   发布时间: 2011-12-26

偶也不是很清楚,给个 传送门 吧

作者: dalmeeme   发布时间: 2011-12-26

引用 5 楼 dalmeeme 的回复:

偶也不是很清楚,给个 传送门 吧
那你说说你知道的吧?也许你能解答我的疑惑的灵感就在你知道的那部分里呢!

作者: xx_mm   发布时间: 2011-12-26

1、判断是否有根引用,其他不知道
2、不知道
3、不知道,是不是因为第0代垃圾回收比较频繁
总之是不知道

作者: zh6335901   发布时间: 2011-12-26

引用 7 楼 zh6335901 的回复:

1、判断是否有根引用,其他不知道
2、不知道
3、不知道,是不是因为第0代垃圾回收比较频繁
总之是不知道
恩,第一条跑到了第二条,就是如何判断根。 我查了CPU L2是L1的一个Copy,L2是为了突破L1的限制,但是速度显然要快于内存,余者也是不清楚了!

作者: xx_mm   发布时间: 2011-12-26

引用 8 楼 xx_mm 的回复:

引用 7 楼 zh6335901 的回复:

1、判断是否有根引用,其他不知道
2、不知道
3、不知道,是不是因为第0代垃圾回收比较频繁
总之是不知道
恩,第一条跑到了第二条,就是如何判断根。 我查了CPU L2是L1的一个Copy,L2是为了突破L1的限制,但是速度显然要快于内存,余者也是不清楚了!

至于怎么判断根的,我查了下书大概是这么说的:JIT编译器生成本地代码的时候,会创建一个内部使用的表。表中的每个记录项代表在方法的本地CPU指令中的一个字节的偏移范围。对于每个范围,这个记录项包含着根的内存地址和CPU寄存器。寄存器中存着根的内存地址,CLR会检查CPU寄存器,只要被CPU寄存器引用的都是根。。。而这些根引用的堆中的对象都不会被视为垃圾(那个什么偏移范围不是很明白)

作者: zh6335901   发布时间: 2011-12-26

1.简单地讲,如果托管堆上的一个对象,没有东西指向它,就会被认为不可达。实际算法可能要复杂得多;
2。不太明白。
3。分配给第0代的空间最小(小于cpu L2),命中率可能较高,变化也较频繁,所以缓存在L2里。

作者: dalmeeme   发布时间: 2011-12-26