垃圾收集器如何确定对象是否是垃圾?它是否指向堆栈以检查对堆中分配的空间的引用?垃圾收集器如何确定对象是否是垃圾?
3
A
回答
4
它采用mark and sweep algorithm。简化版本:首先考虑所有对象符合资格收集。然后它扫描物体的根。任何有根的对象都会被标记为正在使用中。之后所有剩余的对象都被认为是垃圾。 Jeffrey Richter在CLR via C#中有详细的描述。
0
3
This文章A.亨特解释这一切还不错。
总之,GC以下引用查找所有不可达的对象。如果一个对象或其任何超类包含另一个对象的字段,则该对象引用另一个对象。
为了达到这个目的,GC跟踪四种类型的根对象,称为GC根。最常见的根类型是堆栈上创建的所有变量(如您猜测的那样)。其他根类型是静态的,互操作性的和带有终结器方法的对象。
所以是的,GC在大多数情况下指的是堆栈。
+0
一个较小的更正 - 在堆栈上创建的所有变量都是误导性的,“当前正在运行的方法中的局部变量被认为是GC根,这些变量引用的对象总是可以通过它们声明的方法立即访问因此它们必须被保留,这些根的生命周期可以取决于程序的构建方式,在调试版本中,只要方法在堆栈上,局部变量就会持续。参考。 - http://www.simple-talk.com/dotnet/.net-framework/understanding-garbage-collection-in-.net/ – akjoshi 2012-05-24 06:56:32
相关问题
- 1. 垃圾收集对象
- 2. 垃圾收集器是否有配置?
- 3. 垃圾收集器
- 4. java垃圾收集是否安全地清除垃圾数据?
- 5. 活物是垃圾收集?
- 6. 如何跟踪垃圾收集对象
- 7. ActiveX对象和.NET垃圾收集器
- 8. 如何判断一个对象是否被垃圾收集
- 9. 垃圾收集 - 是否需要?
- 10. 垃圾收集是否影响堆栈?
- 11. 是否收集了客观C垃圾?
- 12. GC是否从Metaspace收集垃圾?
- 13. Scala对象何时收集垃圾?
- 14. 如何确定我是否需要使用垃圾回收器?
- 15. 垃圾收集java
- 16. Java垃圾收集
- 17. Java垃圾收集
- 18. C#垃圾收集
- 19. GWT垃圾收集
- 20. DoctrineCommonCache垃圾收集?
- 21. Renderscript和垃圾收集器
- 22. Node.js的垃圾收集器
- 23. .NET垃圾收集器
- 24. 垃圾收集器Flash Player
- 25. 垃圾收集器vs池
- 26. 垃圾收集器asp.net
- 27. Jruby,垃圾收集器,Redis
- 28. 是否有可能为垃圾收集“查看”对象图?
- 29. ParameterizedThreadStart是否保证对象实例不会被垃圾收集?
- 30. 此COM对象是否被垃圾收集?
得到了这本书,并阅读它。非常感谢。现在非常清楚。 – devnull 2010-03-23 09:55:56