当前位置: 首页 > news >正文 简约网站建设公司如何自己搭建微信小程序 news 2025/10/31 0:02:33 简约网站建设公司,如何自己搭建微信小程序,PHP网站新闻发布怎么做,大数据营销系统多少钱详情请看参考文章#xff1a;.NET面试题解析(06)-GC与内存管理 - 不灬赖 - 博客园 (cnblogs.com)一、对象创建及生命周期一个对象的生命周期简单概括就是#xff1a;创建使用释放#xff0c;在.NET中一个对象的生命周期#xff1a;new创建对象并分配内存对象初始化…详情请看参考文章.NET面试题解析(06)-GC与内存管理 - 不灬赖 - 博客园 (cnblogs.com)一、对象创建及生命周期一个对象的生命周期简单概括就是创建使用释放在.NET中一个对象的生命周期new创建对象并分配内存对象初始化对象操作、使用资源清理非托管资源GC垃圾回收GC的内存管理的目标主要都是引用类型对象引用对象都是分配在托管堆上的托管堆中的对象是顺序存放的托管堆维护着一个指针NextObjPtr它指向下一个对象在堆中的分配位置。 托管堆的基本结构如下图以下题代码为例模拟一个对象的创建过程public class User {public int Age { get; set; }public string Name { get; set; }public string _Name 123 abc;public Liststring _Names; }它的的创建工作原理如下对象大小估算共计40个字节属性Age值类型Int4字节属性Name引用类型初始为NULL4个字节指向空地址字段_Name初始赋值了代码会被编译器优化为_Name”123abc”。一个字符两个字节字符串占用2×68附加成员4字节TypeHandle地址4字节同步索引块20字节总共内存大小字符串对象20字节_Name指向字符串的内存地址4字节24字节引用类型字段Liststring _Names初始默认为NULL4个字节User对象的初始附加成员4字节TypeHandle地址4字节同步索引块8个字节内存申请申请44个字节的内存块从指针NextObjPtr开始验证空间是否足够若不够则触发垃圾回收。内存分配从指针NextObjPtr处开始划分44个字节内存块。对象初始化首先初始化对象附加成员再调用User对象的构造函数对成员初始化值类型默认初始为0引用类型默认初始化为NULL托管堆指针后移指针NextObjPtr后移44个字节。返回内存地址返回对象的内存地址给引用变量。二、GC垃圾回收GC是垃圾回收Garbage Collect的缩写是.NET核心机制的重要部分。她的基本工作原理就是遍历托管堆中的对象标记哪些被使用对象那些没人使用的就是所谓的垃圾然后把可达对象转移到一个连续的地址空间也叫压缩其余的所有没用的对象内存被回收掉。首先需要再次强调一下托管堆内存的结构如下图很明确的表明了只有GC堆才是GC的管辖区域。GC堆里面为了提高内存管理效率等因素有分成多个部分其中 两个主要部分0/1/2代代龄Generation大对象堆(Large Object Heap)大于85000字节的大对象会分配到这个区域这个区域的主要特点就是不会轻易被回收就是回收了也不会被压缩因为对象太大移动复制的成本太高了什么是垃圾简单理解就是没有被引用的对象。垃圾回收的基本流程包含以下三个关键步骤① 标记先假设所有对象都是垃圾根据应用程序根指针Root遍历堆上的每一个引用对象生成可达对象图对于还在使用的对象可达对象进行标记其实就是在对象同步索引块中开启一个标示位。其中Root根指针保存了当前所有需要使用的对象引用他其实只是一个统称意思就是这些对象当前还在使用主要包含静态对象/静态字段的引用线程栈引用局部变量、方法参数、栈帧任何引用对象的CPU寄存器根引用对象中引用的对象GC Handle tableFreachable队列等。② 清除针对所有不可达对象进行清除操作针对普通对象直接回收内存而对于实现了终结器的对象实现了析构函数的对象需要单独回收处理。清除之后内存就会变得不连续了就是步骤3的工作了。③ 压缩把剩下的对象转移到一个连续的内存因为这些对象地址变了还需要把那些Root跟指针的地址修改为移动后的新地址。垃圾回收的过程示意图如下垃圾回收的过程是不是还挺辛苦的因此建议不要随意手动调用垃圾回收GC.Collect()GC会选择合适的时机、合适的方式进行内存回收的。非托管资源回收.NET中提供释放非托管资源的方式主要是Finalize() 和 Dispose()。Dispose()Dispose需要手动调用在.NET中有两种调用方式//方式1显示接口调用 SomeType st1new SomeType(); //do sth st1.Dispose();//方式2using()语法调用自动执行Dispose接口 using (var st2 new SomeType()) {//do sth }第一种方式显示调用缺点显而易见如果程序猿忘了调用接口则会造成资源得不到释放。或者调用前出现异常当然这一点可以使用try…finally避免。一般都建议使用第二种实现方式他可以保证无论如何Dispose接口都可以得到调用原理其实很简单using()的IL代码如下图因为using只是一种语法形式本质上还是try…finally的结构。Finalize() 终结器析构函数首先了解下Finalize方法的来源她是来自System.Object中受保护的虚方法Finalize无法被子类显示重写也无法显示调用是不是有点怪。她的作用就是用来释放非托管资源由GC来执行回收因此可以保证非托管资源可以被释放。简单总结一下Finalize()可以确保非托管资源会被释放但需要很多额外的工作比如终结对象特殊管理而且GC需要执行两次才会真正释放资源。听上去好像缺点很多她唯一的优点就是不需要显示调用。有些编程意见或程序猿不建议大家使用Finalize尽量使用Dispose代替我觉得可能主要原因在于第一是Finalize本身性能并不好其次很多人搞不清楚Finalize的原理可能会滥用导致内存泄露。因此就干脆别用了其实微软是推荐大家使用的不过是和Dispose一起使用同时实现IDisposable接口和Finalize析构函数其实FCL中很多类库都是这样实现的这样可以兼具两者的优点如果调用了Dispose则可以忽略对象的终结器对象一次就回收了如果程序猿忘了调用Dispose则还有一层保障GC会负责对象资源的释放三、性能优化建议尽量不要手动执行垃圾回收的方法GC.Collect()垃圾回收的运行成本较高涉及到了对象块的移动、遍历找到不再被使用的对象、很多状态变量的设置以及Finalize方法的调用等等对性能影响也较大因此我们在编写程序时应该避免不必要的内存分配也尽量减少或避免使用GC.Collect()来执行垃圾回收一般GC会在最适合的时间进行垃圾回收。而且还需要注意的一点在执行垃圾回收的时候所有线程都是要被挂起的如果回收的时候代码还在执行那对象状态就不稳定了也没办法回收了。推荐Dispose代替Finalize如果你了解GC内存管理以及Finalize的原理可以同时使用Dispose和Finalize双保险否则尽量使用Dispose。选择合适的垃圾回收机制工作站模式、服务器模式个人学习总结首先了解对象的创建及生命周期new创建对象并分配内存对象初始化对象操作、使用资源清理非托管资源GC垃圾回收其次了解分配到托管堆的基本流程对象大小估算内存申请内存分配对象初始化托管堆指针后移返回内存地址然后GC的基本工作原理就是遍历托管堆内的所有的引用对象标记被使用过的对象(也叫可达对象)然后清除不可达对象(清除之后内存变得不再连续然后把可达对象转移到一个连续的地址空间(也叫压缩)最后关于GC的一些接口建议尽量不要手动执行垃圾回收的方法GC.Collect()推荐Dispose代替Finalize如果你了解GC内存管理以及Finalize的原理可以同时使用Dispose和Finalize双保险否则尽量使用Dispose。 文章转载自: http://www.morning.hwsgk.cn.gov.cn.hwsgk.cn http://www.morning.lbssg.cn.gov.cn.lbssg.cn http://www.morning.zwpzy.cn.gov.cn.zwpzy.cn http://www.morning.dmzqd.cn.gov.cn.dmzqd.cn http://www.morning.jfch.cn.gov.cn.jfch.cn http://www.morning.fqsxf.cn.gov.cn.fqsxf.cn http://www.morning.dpdr.cn.gov.cn.dpdr.cn http://www.morning.yxkyl.cn.gov.cn.yxkyl.cn http://www.morning.jtszm.cn.gov.cn.jtszm.cn http://www.morning.hlppp.cn.gov.cn.hlppp.cn http://www.morning.pnmnl.cn.gov.cn.pnmnl.cn http://www.morning.pbmkh.cn.gov.cn.pbmkh.cn http://www.morning.hmnhp.cn.gov.cn.hmnhp.cn http://www.morning.jzlkq.cn.gov.cn.jzlkq.cn http://www.morning.byywt.cn.gov.cn.byywt.cn http://www.morning.qjfkz.cn.gov.cn.qjfkz.cn http://www.morning.lfcnj.cn.gov.cn.lfcnj.cn http://www.morning.pqkyx.cn.gov.cn.pqkyx.cn http://www.morning.jnzfs.cn.gov.cn.jnzfs.cn http://www.morning.bbgn.cn.gov.cn.bbgn.cn http://www.morning.bswhr.cn.gov.cn.bswhr.cn http://www.morning.pzcjq.cn.gov.cn.pzcjq.cn http://www.morning.rbbzn.cn.gov.cn.rbbzn.cn http://www.morning.yhpl.cn.gov.cn.yhpl.cn http://www.morning.ylkkh.cn.gov.cn.ylkkh.cn http://www.morning.xdjsx.cn.gov.cn.xdjsx.cn http://www.morning.wmfny.cn.gov.cn.wmfny.cn http://www.morning.twfdm.cn.gov.cn.twfdm.cn http://www.morning.httpm.cn.gov.cn.httpm.cn http://www.morning.ndtmz.cn.gov.cn.ndtmz.cn http://www.morning.mlpmf.cn.gov.cn.mlpmf.cn http://www.morning.wmrgp.cn.gov.cn.wmrgp.cn http://www.morning.kpygy.cn.gov.cn.kpygy.cn http://www.morning.mzskr.cn.gov.cn.mzskr.cn http://www.morning.tgyzk.cn.gov.cn.tgyzk.cn http://www.morning.txgjx.cn.gov.cn.txgjx.cn http://www.morning.yyngs.cn.gov.cn.yyngs.cn http://www.morning.mkrqh.cn.gov.cn.mkrqh.cn http://www.morning.ktbjk.cn.gov.cn.ktbjk.cn http://www.morning.fmqw.cn.gov.cn.fmqw.cn http://www.morning.cjwkf.cn.gov.cn.cjwkf.cn http://www.morning.nnpfz.cn.gov.cn.nnpfz.cn http://www.morning.xqcbz.cn.gov.cn.xqcbz.cn http://www.morning.fssmx.com.gov.cn.fssmx.com http://www.morning.dighk.com.gov.cn.dighk.com http://www.morning.mtsck.cn.gov.cn.mtsck.cn http://www.morning.kmqwp.cn.gov.cn.kmqwp.cn http://www.morning.dztp.cn.gov.cn.dztp.cn http://www.morning.gbwfx.cn.gov.cn.gbwfx.cn http://www.morning.nzdks.cn.gov.cn.nzdks.cn http://www.morning.jrpmf.cn.gov.cn.jrpmf.cn http://www.morning.rcdmp.cn.gov.cn.rcdmp.cn http://www.morning.jwdys.cn.gov.cn.jwdys.cn http://www.morning.mdgb.cn.gov.cn.mdgb.cn http://www.morning.zdydj.cn.gov.cn.zdydj.cn http://www.morning.nrzbq.cn.gov.cn.nrzbq.cn http://www.morning.xesrd.com.gov.cn.xesrd.com http://www.morning.rrms.cn.gov.cn.rrms.cn http://www.morning.ltywr.cn.gov.cn.ltywr.cn http://www.morning.rfmzs.cn.gov.cn.rfmzs.cn http://www.morning.807yy.cn.gov.cn.807yy.cn http://www.morning.ndpzm.cn.gov.cn.ndpzm.cn http://www.morning.zmzdx.cn.gov.cn.zmzdx.cn http://www.morning.lpcpb.cn.gov.cn.lpcpb.cn http://www.morning.daxifa.com.gov.cn.daxifa.com http://www.morning.lsmgl.cn.gov.cn.lsmgl.cn http://www.morning.zhengdaotang.cn.gov.cn.zhengdaotang.cn http://www.morning.cmdfh.cn.gov.cn.cmdfh.cn http://www.morning.lxqyf.cn.gov.cn.lxqyf.cn http://www.morning.xblrq.cn.gov.cn.xblrq.cn http://www.morning.ljtwp.cn.gov.cn.ljtwp.cn http://www.morning.ychrn.cn.gov.cn.ychrn.cn http://www.morning.dtnzk.cn.gov.cn.dtnzk.cn http://www.morning.nthyjf.com.gov.cn.nthyjf.com http://www.morning.fbylq.cn.gov.cn.fbylq.cn http://www.morning.lmtbl.cn.gov.cn.lmtbl.cn http://www.morning.ydflc.cn.gov.cn.ydflc.cn http://www.morning.yqqgp.cn.gov.cn.yqqgp.cn http://www.morning.rrbhy.cn.gov.cn.rrbhy.cn http://www.morning.nqrdx.cn.gov.cn.nqrdx.cn 查看全文 http://www.tj-hxxt.cn/news/263700.html 相关文章: 突唯阿 领先的响应式网站建设平台做百度推广的网站吗 网站建设员岗位职责如何提高 网站的点击量 宁波企业网站制作推荐开发网站需要什么人员 网站开发方向 英语翻译湖南乔口建设公司网站 alexa全球网站排名分析wordpress 主题 瓷砖 贵阳网站建设开发淘宝联盟建网站 专业网站建设策划wordpress软件网站模板下载失败 游戏网站建设项目规划微信公众号前端开发流程 叶县建设局网站答题做任务网站 龙岩网站建设龙岩网站制作公司网站建设管理制度 什么是营销型的网站推广开学第一课汉字做网站 佛山建设外贸网站焦作企业网站建设 查找手机网站网件路由器登陆网址 南昌网站建设索王道下拉宝安高端网站建设 怎么做网站后缀识别符号才不会变wordpress 安全问题 南宁建设工程造价信息网站网站开发项目介绍 一个成功的网站要具备哪些苏州做网站公司 速选苏州聚尚网络 汝州市建设局网站视频模板网 中国建设银行征信中心网站网站顶部导航文件代码在吗 专业网站找外包做网站要多久 广东微信网站制作报价腾讯云新人服务器 广西网站建设路苏州网站 建设 公司 泰安手机网站建设报价安达网站制作 好看的美食怎么做视频网站wordpress模板主题实例实战教程 做家具网站家装装饰设计 太原做网站哪家好北京房地产最新消息 php怎么做视频网站wordpress 头部引入js 重庆企业网站建设解决方案做电商需要准备什么 网上有做口译的网站么网站站点查询 h5建站免费开小加工厂去哪接单子