您的位置:首页 > 职场人生

内存分配和垃圾回收

2011-07-26 11:02 169 查看
.NetFrameWork

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

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





首先是在托管堆中给线程堆栈中的对象分配内存空间 ,经过一段时间后会遍历线程堆栈 如果对象使用完了会在线程堆栈中出栈 在线程堆栈中寻找那些在托管堆中分配了内存的对象
如果没有找到 说明该对象已经从线程堆栈中出栈 不再使用了 这时就会从托管堆里把给它分配的内存释放掉。然后压缩托管堆 通过新对象的指针为新对象分配内存





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

利用代(就是对象在内存中存放的时间长短)这种垃圾收集器来给对象分配内存:分配方式:
CLR支持3代内存:第0代对象的预算容量为256K 第1代对象预算容量为2M 第2代对象预算容量为10M
托管堆中没有任何对象,此时添加的对象为0代对象
当0代对象达到256K了 即0代对象放满了就开始垃圾回收 找到不再使用的就释放掉 然后把原来的还使用的放到一代中,新添加的对象放到0代中 当第二次添加的对象的0代也放满了 就启用垃圾回收把此时的0代放到1代中 把最开始的0代放到2代中









http://home.cnblogs.com/wz/关于这部分 博客园里有转载的专家‘深奥’的解释 呵呵
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息