.net内存管理

  最近两天看了不少.net内存管理的文章,强化一下这方面的知识.现在心里有数,于是写出来.

  .net框架下的生成的程序在运行时需要即时编译,JIT,just in time.代码都是IL,这就很容易被反编译.MONO框架下的程序运行时不需要安装框架,而.net程序需要安装框架.

  内存分配分为托管资源,与非托管资源.非托管资源在,CPU寄存器,线程栈中.还提起到一个东西,协程,不同于线程,协程的调用时机由程序员决定,而不是CPU决定.

  托管资源,通过垃圾回收器管理.将托管资源分成3代,0, 1, 2代.资源最初被标记为0代.在0代资源紧张时,进行0代回收,将失去引用的内存收回,同时将0代资源改为1代.

  此后,0代再紧张,对0代和1代进行回收,0变1代,1变2代.这样进行下去.总体来说,0代1代2代回收触发机率之比大概是100:10:1.

  不得不说,垃圾回收模式分为三种.他们之间的不同之处在于机器的CPU个数,内存大小.即,工作站并发关,工作站并发开,服务器,这三种模式.对于单CPU机器,只能用工作站并发关,这样的模式,垃圾回收时挂起所有其他线程,直到垃圾回收完成,工作站并发开,时候多CPU机器,也就是多核CPU,这种模式在垃圾回收进行时开一个单独的线程进行垃圾回收.服务器模式下,用作分配的内存段大小更大,这样就不会频繁发生垃圾回收.此外,finalize方法在对象失去引用时,在垃圾回收触发时,在所有垃圾回收处理完后,再调用,之后下次垃圾回收时,那个对象就彻底被回收了,也就是,他要经历两个垃圾回收才能被回收.

  这一套东西,要想吃透,需要很多基础知识,与时间.之前的东西搞得不透彻,想把这个搞透彻,也并非易事.

  总觉得.net开发环境不适合我,我还是喜欢用C++自己搞内存处理这块.没办法,当初就上了unity这条贼船,就搞这个了,多领悟点思想,对我来说也是好事,把opengl图形库学好之后,复习下C++,就可以去开发图形库了...希望如此吧.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值