zoukankan      html  css  js  c++  java
  • 对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架构优化或是常用架构写下,真怕工作中用不到久了就都忘了,不过不属基础、应该是加密的了,呵呵~

    若转载,请注明@jiyilee.cnblogs.com 珍惜生活,努力工作!!!
  • 相关阅读:
    正则表达式的先行断言(lookahead)和后行断言(lookbehind)
    正则表达式里的捕获组
    JavaScript高级程序设计8.pdf
    JavaScript高级程序设计7.pdf
    JavaScript高级程序设计6.pdf
    JavaScript高级程序设计5.pdf
    JavaScript高级程序设计4.pdf
    产品思维|腾讯工作心得:原型该画到什么程度?
    提名推荐!15个2019年最佳CSS框架
    腾讯工作心得:原型该画到什么程度?
  • 原文地址:https://www.cnblogs.com/jiyilee/p/4925426.html
Copyright © 2011-2022 走看看