Q-->question A-->answer M-->mention
The Chapter 20th Garbage Collection
Q:GC的工作原理?
1.访问资源的步骤?
(1) 调用IL中的newobj指令,为某个特定资源的类型分配一定的内存
(2) 初始化分配到的内存,使资源可用(调用实例构造器)
(3) 通过访问类型成员来使用资源(可反复进行)
(4) 销毁资源状态,执行清理工作
(5) 释放内存,GC独自负责这一步
2.newobj指令导致的操作?
(1) 计算类型所有字段(包含基类型所有字段),所需要的字节总数
(2) 上述字节总数再加上对象开销所需字节数,包括类型对象指针及一个同步块索引.32位的应该为8个字节,64位的应用为16个字节.
(3) CLR检查保留区域中的空间是否满足分配新对象所需的字节数,若是有足够空间,对象将被满足,对象被分配在NextObjPtr指针所指示的位置,newobj返回对象的地址前,nextPtr将前移
Q:何为托管堆?
A:当应用程序初始化完后,CLR将保留一段连续的地址空间,此段空间初始并不对应任何物理内存,该地址空间即为堆.
Q:GC有何作用?
A:1.不必再自己实现代码来管理应用程序中对象的生存期
2.以前经常出现的两种BUG将不复存在(内存泄漏和访问已被释放的对象)