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 珍惜生活,努力工作!!!
  • 相关阅读:
    进入到已有的docker容器中
    Ubuntu 18.04下指定Sublime Text 3 默认python编译版本
    设计模式之单例模式(c++版)
    clang10在ubuntu18.04下编译ZeroTier,故障解决
    搜狗输入法安装实践
    ubuntu 安装 dingtalk,飞书,google,zoom,时钟等
    js为某个元素添加某个类,并为其他兄弟元素删除此类
    jquery 中attr和css的区别
    unlimited tablespace 权限是否对所有表空间拥有权限测试
    Oracle DG 日常管理操作
  • 原文地址:https://www.cnblogs.com/jiyilee/p/4925426.html
Copyright © 2011-2022 走看看