对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架构优化或是常用架构写下,真怕工作中用不到久了就都忘了,不过不属基础、应该是加密的了,呵呵~
对CLR基本原理概念&垃圾回收机制的简单理解的更多相关文章
- python垃圾回收机制的一些理解
概览: 主要通过 引用计数来进行垃圾收集, 就是说,当一个对象没有被其他对象引用的时候,会释放掉内存. 但是会有一些循环引用的对象,通过上面的方法,是没有办法清除掉的.所以,pyt ...
- CLR中的垃圾回收机制
CLR中采用代(generation)来作为其垃圾回收的一种机制,其唯一的目的是提升程序的性能.基予代的垃圾回收器有以下假设: ·对象越新,其生存周期越短. ·对象越老,其生存周期越长. ·回收堆的一 ...
- .Net 垃圾回收机制原理(一)
英文原文:Jeffrey Richter 编译:赵玉开 链接:http://www.cnblogs.com/yukaizhao/archive/2011/11/23/dot_net_GC_1.html ...
- .NET垃圾回收机制 转
在.NET Framework中,内存中的资源(即所有二进制信息的集合)分为"托管资源"和"非托管资源".托管资源必须接受.NET Framework的CLR( ...
- .NET垃圾回收机制(一)
垃圾收集器(GarbageCollection)是组成.Net平台一个很重要的部分,.NET垃圾回收机制降低了编程复杂度,使程序员不必分散精力去处理析构.不妨碍设计师进行系统抽象.减少了由于内存运用不 ...
- erlang二进制数据垃圾回收机制
erlang二进制数据在内存中有两种存在形式,当数据大小不到 64 bytes,就直接存在进程堆内.假设超过了64 bytes.就被保存到进程外的共享堆里,能够给节点内全部进程共享. erlang有两 ...
- PHP5底层原理之垃圾回收机制
概念 垃圾回收机制 是一种内存动态分配的方案,它会自动释放程序不再使用的已分配的内存块. 垃圾回收机制 可以让程序员不必过分关心程序内存分配,从而将更多的精力投入到业务逻辑. 与之相关的一个概念,内存 ...
- PHP垃圾回收机制的一些浅薄理解
相信只要入门学习过一点开发的同学都知道,不管任何编程语言,一个变量都会保存在内存中.其实,我们这些开发者就是在来回不停地操纵内存,相应地,我们如果一直增加新的变量,内存就会一直增加,如果没有一个好的机 ...
- 掌握PHP垃圾回收机制
php的垃圾回收机制可以简单总结为 引用计数 写时复制 COW机制, 本文主要和大家分享掌握php垃圾回收机制的知识,希望能帮助到大家. 引用计数基本知识 官网的解答如下 每个php变量存在一个叫”z ...
随机推荐
- SilverlightOA源代码(可用于企业级Silverlight项目的二次开发,长年有效)
Silverlight OA系统简介 系统功能简介 l 程序界面介绍: 左侧为主菜单,主菜单可以展开和收起,主菜单下面的所有模块都可以在数据库中扩展增加,模块的权限和用户角色挂钩,可以在数据库中创建多 ...
- 【AT91SAM3S】英倍特串口示例工程05-UART中,串口是怎样初始化的
在这个示例工程的main.c文件中,进入main之后,没有发现串口功能的任何配置.直接使用了printf这个东西进行输出.将软件下载到开发板上之后,在电脑端使用串口软件,可以看板子有数据发来.说明这个 ...
- Android OpenCV 图像识别
最近打算写一个android 平台opencv 的小程序,着手查找了一下资料.网络上的资料参差不齐,有一些都比较老旧,我参考了前面的方法找到了一个简单的搭建方法,分享给大家. 0,环境的搭建: jav ...
- Python正则表达式指南
1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...
- Electron实战:创建ELectron开发的window应用安装包
前言:研究electron自动更新的时候,在electron的官方文档auto-updater 中,提到了在几个平台mac,Linux,windows下electron 的自动更新方法,其中winds ...
- How to force the UI to refresh immediately(WPF)
Question 0 Sign in to vote Folks, In my application, when the user hits "Submit" button, I ...
- Blackfin DSP(三):BF533 的EBIU接口之flash
上一节谈了GPIO问题,是用BF561 ezkit进行说明的,这是因为561 ezkit上的GPIO是与LED直连的,讲解GPIO时不会涉及到其它问题,降低了复杂性.对于533,也采取同样的操作即可. ...
- 61. Unique Paths && Unique Paths II
Unique Paths A robot is located at the top-left corner of a m x n grid (marked 'Start' in the diagra ...
- Spark SQL External Data Sources JDBC官方实现写测试
通过Spark SQL External Data Sources JDBC实现将RDD的数据写入到MySQL数据库中. jdbc.scala重要API介绍: /** * Save this RDD ...
- 用于列出选项的Windows窗体控件
可以提供选项列表的控件有ListBox.ComboBox.CheckedListBox,如何正确的使用和选择这些控件,下面对此进行讨论.首先对这三种控件的功能分别进行说明: ListBox ListB ...