对CLR基本原理概念&垃圾回收机制的简单理解

前言,之前有说过C语言的函数&变量的一些基本概念,说得可能不是很好,先也把C#的、里相关的也说下,已成一统。

而说函数变量,其实主要就是GC,而GC又是CLR的主要内容,故就有了此文。

 

CLR基本原理:

把这几个概念一说基本就知道了,其实就是为了跨语言、跨平台,和JAVA的JVM类似

(有在一优化性能书看过jvm各种底层详解,不过那种优化级别..思想很不错,但看看了解就好了)

1.MSIL,中间语言,就是独立于所在平台系统的.net的特殊代码。里面含有相关元数据信息,常用的反编译工具想ILspy等就是靠他吃饭的。

2.CLR,公共语言运行时,其实就是把VB、VC、C#等不同语言编译成同一的中间语言

3.JIT,即使运行时,其实就是个翻译器,把IL翻译成对应系统的二进制代码并运行之

 

当然还有一些什么加载dll*exe等文件时的行为控制及解析里面(对象等)关系,验证程序集版本等等就没必要说了,谈不上主要原理

 

CLR内存管理:

1.堆栈,这个和C语言说的基本相同,

一般变量值存在栈中,用变量(栈指针)指向,程序调用过程就是入栈出栈过程,调用完即出完栈就没了;

而自定义类型数据一般存储堆(也叫托管堆)中,用变量(对象地址)指向,调用完可能还在内存,等待GC定时回收;

2.GC垃圾回收

垃圾回收方式,一般常用有标志清楚(即CLR用的)和引用计数器(OC用的就是)两个方式。

其实就是先循环查找标志不被引用的垃圾,再循环清楚,这个比较耗些资源,故oc用不起(oc计数又麻烦就有了ARC,这个OC另说)。

但GC回收不一定是实时的,好像有几个实用时间最短、最久没用等的算法什么的策略

3.非托管资源

不在CLR自动控制范围内的资源需要我们写代码手动释放,常见的想文件、网络、数据库等操作资源都是。

释放方式一般有两种:A,实现虚方法,B实现dispose方法(也就是using)

 

好了,写了快一个小时了,应该有吧?就这样吧。

上面就是我所知道最简单的CLR原理和一些(GC)概念理解,深入我也不清楚,只能查资料了。。。

 

PS,明天还是迟些时间把mysql架构优化或是常用架构写下,真怕工作中用不到久了就都忘了,不过不属基础、应该是加密的了,呵呵~

 

转载于:https://www.cnblogs.com/jiyilee/p/4925426.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值