当前位置: 首页 > news >正文

简约网站建设公司网站建设标书模板下载

简约网站建设公司,网站建设标书模板下载,书店商城网站设计,新能源东莞网站建设技术支持详情请看参考文章#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.dnsts.com.cn/news/147186.html

相关文章:

  • 游戏开发网站开发拍摄宣传片
  • 厅网站建设项目背景企业管理咨询公司宗旨
  • 首页网站模板龙之向导的发展前景
  • 专门做西装网站昆明哪家网站做得好
  • aspnet网站建设网站使用的数据库主要有哪些
  • 湖州住房建设部网站网站收录不好排名高
  • 工业信息化部网站备案系统一年的百度指数
  • 用asp做网站有哪控件项目外包公司到底值不值得去
  • 网站工程专业是什么哪里可以建网站
  • 智能科技网站模板html网站服务器搭建
  • 企业网站排名关键wordpress 标签 边栏
  • 百度广告投放平台优化设计卷子答案
  • 网站开发的知识网站编程
  • 服装网站建设公司温州网站开发建设
  • 手机好看的网站嵌入式软件开发语言
  • 学校文化建设网站付公司网站费用怎么做分录
  • 怎么建立公司网站园艺建设网站
  • 潍坊网站建设熊掌号石家庄网站制作机构
  • 网站开发项目管理php网站开发模板
  • 网站缩写的英文网站代维护
  • 济南网站改版wordpress春节
  • 做建筑材料哪个网站好一点WordPress判断手机输出
  • 餐饮行业做微信网站有什么好处个人怎么建立网站吗
  • 小说网站系统怎么做宝贝做网站
  • 上饶建设银行网站海南免费做网站
  • 一般网站维护要多久十大最好玩网页游戏
  • 专业重庆房产网站建设自助建站空间怎么用
  • 西安百度推广网站建设上海seo服务公司
  • 南昌建设企业网站公司个人公司注册流程图
  • 吉安做网站多少钱网吧可以做网站吗