.NetFrameWork

 

解释.NET Framework 的垃圾回收器管理应用程序的内存分配和释放。(面试)

 

首先要实例化新对象,计算字段所需的空间 对象所需的空间包括两部分:同步索引块和类型对象指针 在分配内存在事后,新对象的指针指向下一个可用内存区域、

内存分配和垃圾回收_第1张图片

首先是在托管堆中给线程堆栈中的对象分配内存空间 ,经过一段时间后会遍历线程堆栈 如果对象使用完了会在线程堆栈中出栈 在线程堆栈中寻找那些在托管堆中分配了内存的对象

如果没有找到 说明该对象已经从线程堆栈中出栈 不再使用了 这时就会从托管堆里把给它分配的内存释放掉。然后压缩托管堆 通过新对象的指针为新对象分配内存

 

内存分配和垃圾回收_第2张图片

然后描述托管堆中是怎么进行内存分配和垃圾回收的:

 

利用代(就是对象在内存中存放的时间长短)这种垃圾收集器来给对象分配内存:分配方式:

CLR支持3代内存:第0代对象的预算容量为256K 1代对象预算容量为2M 2代对象预算容量为10M

 托管堆中没有任何对象,此时添加的对象为0代对象

0代对象达到256K 0代对象放满了就开始垃圾回收 找到不再使用的就释放掉 然后把原来的还使用的放到一代中,新添加的对象放到0代中 当第二次添加的对象的0代也放满了 就启用垃圾回收把此时的0代放到1代中 把最开始的0代放到2代中

 

 

内存分配和垃圾回收_第3张图片

 

内存分配和垃圾回收_第4张图片

 

 

 http://home.cnblogs.com/wz/关于这部分 博客园里有转载的专家‘深奥’的解释 呵呵