浅谈CLR基础知识

中午的时候,有一个小伙伴问我,CLR到底是进程还是线程,它和自己写的程序是怎么关联的。这一问,直接把我问懞了。下面我尝试用简单的语言来描述这个问题,有的地方无法讲的太细(不然内容会太多),大家还是带着辩证的眼光来看。

假如现在有这样一个程序,如下:

代码很简单,就不解释了。这个程序编译生成的exe,里面并不是二进制代码,而是中间语言IL,IL是不能直接被机器执行的,所以需要CLR将IL代码翻译成可执行的机器代码,具体是由JIT解释器翻译。如下图:

重点来了,当我们双击exe执行这个程序时,操作系统会创建进程,这里首先会加载CLR,简单说是创建CLR虚拟机进程,创建完成后,虚拟机会从硬盘加载代码文件并解释为机器代码,并将其放置内存中,虚拟机会在我们的程序代码中查找Main入口并创建主线程,并将入口地址交由cpu开始执行。大概情况如下图:

这里要补充一下,CLR会划分程序域(AppDomain),相当于在进程中又逻辑上细化了一层。看完.Net的,我们再比较下JVM,其实和.net类似,java编写的代码,也是中间语言,即.class字节码,当执行java命令时,也会先创建JVM虚拟机,即虚拟机进程,然后从硬盘加载代码并编码为机器代码,找到main方法并创建主线程执行,流程和CLR比较类似,只是JVM中没AppDomain概念。大概情况如下图:

最后总结一下,CLR和JVM都是虚拟机,执行程序时,先创建CLR或JVM虚拟机进程,也就是程序的运行环境,然后再从硬盘加载并编译我们的程序代码,我们的程序其实就是一个线程。你可能会问,CLR和JVM虚拟机又是哪来的,其实就是来自你系统中装的运行时,比如jre。

讲的比较粗糙,希望对你能有所帮助,拜拜~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/305909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Asp.Net Core使用Skywalking实现分布式链路追踪

介绍Skywalking 是 Apache 基金会下面的一个开源 APM 项目,是一套(APM)分布式追踪系统,提供了很多数据存储列如:Mysql,H2,Elasticsearch7 等。其中APM 全称是应用性能监测软件,主要是用来处理以及追踪分布式…

python 里什么时候缩进_python什么时候缩进

Python中的缩进(Indentation)决定了代码的作用域范围。这一点和传统的c/c有很大的不同(传统的c/c使用花括号花括号{}符决定作用域的范围;python使用缩进空格来表示作用域的范围,相同缩进行的代码是处于同一范围)。每行代码中开头的空格数(whitespace)用于…

C# 9 新特性 —— 补充篇

C# 9 新特性 —— 补充篇Intro前面我们分别介绍了一些 C# 9 中的新特性,还有一些我觉得需要了解一下的新特性,写一篇作为补充。Top-Level Statements在以往的代码里,一个应用程序必须要有 Main 方法才能运行,从 C# 9 开始&#xf…

使用Popup窗口创建无限级Web页菜单(5)

代码框架在(4)里面已经全部列出来了,现在工作就是按流程把他们完成。本来实现一个prototype的Menu菜单类只需要最多300行代码,可是后来做了一些操作习惯支持和UI显示上的优化后,代码猛增到了1000多行。不过final版本看起来确实比土不拉叽的pr…

【gRPC】ProtoBuf 语言快速学习指南

继上篇【gRPC】 在.Net core中使用gRPC了解了gRPC的使用,gRPC基于HTTP/2和ProtoBuf,ProtoBuf就非常有必要好好了解一下了,那么ProtoBuf究竟是什么?ProtoBuf Google Protocol Buffer是一种语言无关、平台无关、可扩展的序列化结构数…

vspythonqt混合_PYQT5 vscode联合操作qtdesigner的方法

除了使用pycharm外,还可使用vscode来操作pyqt,方法如下:1. 在vscode中配置相关的pyqt的相关根据自己实际情况修改第一项pyqt的路径2. 创建一个文件夹,右键,最后一项可以创建一个新窗口创建的新窗口后缀为 .ui右键中有以…

TIOBE 1 月榜单:Python年度语言四连冠,C 语言再次第一

喜欢就关注我们吧!TIOBE 公布了 2021 年 1 月的编程语言排行榜。TIOBE 本月公布了 2020 年度编程语言,Python 获得四连冠,是过去一年中最受欢迎的编程语言。Python 在 2020 年实现了 2.01% 的正增长;C 紧随其后&#x…

A piecture of J2EE Core Patterns

这张图是J2EE Core Patterns里面的一幅图片,在Enterprise Solution Patterns Using Microsoft.Net里面虽然模式的概念与应用大同小异,但是那张表现架构模式整体的图感觉有点不直观,相比之下这幅图显得更清晰一点。 发到这里供大家参考学习:&#xff09…

孙丕恕离开浪潮 仪器厂历时60年成为服务器龙头企业

2020年12月31日浪潮集团有限公司董事会选举邹庆忠为公司董事长(法定代表人);孙丕恕不再担任公司董事长;公司不再聘任孙丕恕为首席执行官。另外,经省委研究决定,拟任省直部门(单位)副…

java 数组 树_java使用顺序数组实现二叉树

顺序数组实现二叉树实现原理对于下标为index的节点其满足1.左孩子节点的下标为2index12.右孩子节点的下标为2index2代码实现package tree;public class ArrayBinaryTree {private int[] arr;public ArrayBinaryTree(int[] arr){this.arrarr;}public void preOrder(int index){i…

【Docker】Asp.net core在docker容器中的端口问题

还记得【One by one系列】一步步学习docker(三)——实战部署dotnetcore中遇到的问题么?容器内部启动始终是80端口,并不由命令左右。docker run --name container-name -p 81:5000 mywebapi所谓知其然就要知其所以然,浅…

.net 5.0 中的 JsonConsole

asp.net core 5.0 中的 JsonConsoleIntroasp.net core 5.0 中日志新增了 JsonConsole,还是输出日志到 Console,但是会应用 Json 格式的一个 Formatter 把日志格式化成 json 再输出到控制台Sample一起来看一个示例,以我的一个小项目为例子来演…

采用开源软件搭建WebGIS系统(6)数据格式

[本文版权由xiaotievip.sina.com所有,转载需得到作者同意。] 在国家基础地理信息中心下载到的数据格式是Shape file数据。Shape file数据由3个文件构成,*.shp,*.dbf和*.shx,分别存储空间数据、属性数据和两者间的关系。*.shp得专门…

.NET Core 使用Topshelf方式创建Windows服务

Topshelf是一个.NET Standard库,它消除了在.NET Framework和.NET Core中创建Windows服务的那些麻烦。安装Install-Package Topshelf代码using System; using System.Collections.Generic; using System.Text; using Topshelf;namespace ConsoleApp2222 {public clas…

Roslyn 使用 Directory.Build.props 管理多个项目配置

在一些大项目需要很多独立的仓库来做,每个仓库之间都会有很多相同的配置,本文告诉大家如何通过 Directory.Build.props 管理多个项目配置在我的 MVVM 框架需要三个不同的库,一个是 Framework 另外两个是 WPF 和 UWP 这三个库有很多重复的配置…

java 中符号_谁能告诉我java中符号的用法,见代码

展开全部大家都知道Vector以及其他的容器可以不加任何修饰地e68a8462616964757a686964616f31333236373765存储任何类型的对象,这给我们带来了极大的方便,也使得容器很容易被复用,但是大多数时候我们可能需要只能存储某一类型对象的Vector,这是…

在.NET Core中使用Channel(一)

我最近一直在熟悉.net Core中引入的新Channel<T>类型。我想在它第一次发布的时候我了解过它&#xff0c;但是有关文章非常非常少&#xff0c;我不能理解它们与其他队列有什么不同。在使用了一段时间后&#xff0c;我终于看到了它们的吸引力和真正的力量。最值得注意的是大…

java控制系统音量_Java 控制 Windows 系统音量-Go语言中文社区

目录1、使用 Java 来控制 Windows 系统音量&#xff0c;使用 JNA 调用 windows 底层 API 因为有点麻烦&#xff0c;所以这里采用纯 Java API结合 VBS 脚本的方式进行控制。2、可以参考《VBS 控制 Windos 系统音量 及视频播放》&#xff0c;本文同样是利用 VBS 来控制&#xff0…

【Hook】postman工具的代码生成工具让它锦上添花

修改postman工具的代码生成工具加入response自动生成POJO代码如上图可以快速把请求这个动作转成code&#xff0c;减少重复性劳动。但是有一点我觉得可以优化下 就是返回的json如果也能自动转成代码就好了。不然在需要把json序列化成java或者csharp的POJO对象时还得自己coding转…

使用BeetleX.ESDoc构建文档搜索功能

BeetleX.ESDoc组件是基于ElasticSearch服务的文档搜索扩展组件。它在BeetleX.Elasticsearch的基础上包装一些基于文档检索的功能和方法&#xff0c;可以让你在不了解ElasticSearch API的情况下直接存储&#xff0c;删除和搜索相关信息。信息结构BeetleX.ESDoc定义了一个基础的文…