字节码(英语:Bytecode)将虚拟机可以读懂的代码称之为字节码。将源码编译成虚拟机读的懂的代码,需要虚拟机转译后才能成为机器代码的中间代码 叫做字节码。

字节码主要为了实现特定软件运行和软件环境、与硬件环境无关。字节码的实现方式是通过编译器和虚拟机。编译器将源码编译成字节码,特定平台上的虚拟机将字节码转译为可以直接执行的指令。字节码的典型应用为在.net中也叫做IL中间语言。

作用:解决穿透解释性语言的低效问题。

编程语言与字节码

编译型语言

需要通过编译器,将源代码编译成机器码之后才能执行的语言。一般是通过编译和链接两个步骤,编译是将我们的程序编译成机器码,链接是程序和依赖库等串联起来。

优点:编译器一般会有预编译的过程对代码进行了优化,因为编译只做了一次,运行时不会在编译,所以编译型语言效率高。

缺点:编译之后如果想要修改某一个功能,就需要整个模块重新编译。编译的时候根据对应的运行环境生成不同的机器码。不同的操作系统之间,可能会有问题。需要根据环境的不同,生成不同的可执行文件。

代表语言:C、C++、Pascal、Object-C以及最近很火的苹果新语言swift,GO

解释型语言

解释型语言不需要编译,相比编译型语言省了道工序,解释型语言在运行程序的时候才逐行进行翻译。字节码也是解释型的一部分。

优点:有良好的平台兼容性,只要安装了虚拟机,就可以。容易维护,方便快速部署,不用停机维护。

IL中间代码--CLR平台上的字节码

C# 源代码到机器码过程:

1、源代码——2、编译器(vs自带的csc.exe,还有mono的mcs.exe,【java编译器javac.exe】)——3、IL中间语言字节码——4、CLR启动JIT即时编译——5、将IL编译为可以真正在CPU上运行的机器码。

编译时【工具:编译器】:步骤1 到 步骤3,编译源代码

运行时【工具:CLR】:步骤3到步骤5。编译IL

运行时就是代码跑起来了.被装载到内存中去了.(你的代码保存在磁盘上没装入内存之前是个死家伙.只有跑到内存中才变成活的).

中间语言IL

中间语言【IL】有时也称为公共中间语言(CIL:Common Intermediate Language) 或 Microsoft中间语言(MSIL),也可叫做字节码。

之所以叫公共的,可以理解为 就是可以被不同平台【操作系统】上识别,所以才可移植。

IL我们是看不懂的,因为他是二进制的,

我们说的学习并分析IL并不是IL,而是由IL这种汇编语言【相当于.Net平台的汇编语言,类似于Windows平台的汇编语言】编写的代码,我们可以看懂,JIT不能直接运行我们使用IL汇编语言写的代码,JIT运行的是IL汇编语言编译成的IL代码【二进制字节码】,编译器不是编译源码的csc.exe,也不是编译IL为机器码的JIT即时编译器而是,ilasm.exe即IL汇编程序,对应的还有ildasm.exe IL反汇编程序

【计算机基础】IL代码-CLR平台上的字节码【什么是字节码?它与虚拟机的关系?】的更多相关文章

  1. MacOS平台上编译 hadoop 3.1.2 源码

    1. 先从官方下载源码:源码下载地址:https://hadoop.apache.org/releases.html,下载 3.1.2 版本 2. 解压缩源码:tar xvf hadoop-3.1.2 ...

  2. 认识IL代码---从开始到现在 <第二篇>

    ·IL代码分析方法 ·IL命令解析 ·.NET学习方法论 1.引言 自从『你必须知道.NET』系列开篇以来,受到大家很多的关注和支持,给予了anytao巨大的鼓励和动力.俱往昔,我发现很多的园友都把目 ...

  3. Web开发者的六个代码调试平台

    代码调试平台是Web开发者进行开发.测试.分享.协作和交流的网络应用,它们支持实时的编辑.预览HTML.CSS和JavaScript的客户端代码.这些代码调试平台最值得称道的地方在于,它们中的大多数都 ...

  4. 读懂IL代码(三)

    由于要写毕业论文的缘故,最近比较没有时间写,总是要抽出时间抽出时间.诶,这样的生活比较烦躁. 这一篇主要写委托.类.方法的IL代码,一一来说明. 委托:搞过C#的都应该清楚,委托实际上是一个类.编译器 ...

  5. CLR基础,CLR运行过程,使用dos命令创建、编译、运行C#文件,查看IL代码

    CLR是Common Language Runtime的缩写,是.NET程序集或可执行程序运行的一个虚拟环境.CLR用于管理托管代码,但是它本身是由非托管代码编写的,并不是一个包含了托管代码的程序集, ...

  6. 四、CLR执行程序集中代码和IL代码简介

    三.加载公共语言运行时中介绍了在安装了.Net Framework中加载公共语言运行时,公共语言运行时加载程序集的过程.以及通过vs stdio设置源码编译的目标平台的过程. 本问主要介绍公共语言加载 ...

  7. 一、源代码-面向CLR的编译器-托管模块-(元数据&IL代码)

    本文脉络图如下: 1.CLR(Common Language Runtime)公共语言运行时简介 (1).公共语言运行时是一种可由多种编程语言一起使用的"运行时". (2).CLR ...

  8. C#基础拾遗系列之一:先看懂IL代码

    一.前言 首先,想说说为什么要写这样系列的文章,有时候在和同事朋友聊天的时候,经常会听到这样的话题: (1)在这家公司没什么长进,代码太烂,学不到东西.(你有没有想想框架为什么这样写,代码还可以怎么去 ...

  9. CLR Via第一 章 知识点整理(3)CLR执行程序集的IL代码

    在了解CLR运行之前让我们先简单了解一下IL 除了编译器编译的IL代码,IL也是一种汇编语言,也就是说我们可以直接编写IL代码,当然也有对应的IL编译器,值得一提的是对于面向CLR的其他语言,CLR只 ...

随机推荐

  1. 集合框架-工具类-Collection-toArray方法

    1 package cn.itcast.p3.toolclass.arrays.demo; 2 3 import java.util.ArrayList; 4 import java.util.Arr ...

  2. JavaWeb后端工程师技能图

  3. 羽夏看Win系统内核—— APC 篇

    写在前面   此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...

  4. ApacheCN 所有教程/文档集已备份到 Coding

    QuantLearning 数据科学 WIKI 安全 WIKI 团队 WIKI Sklearn 中文文档 PyTorch 中文文档 TutorialsPoint 中文系列教程 Java8 中文官方教程 ...

  5. C++/WinUI 3 技术笔记(一)

    微软在 Windows 10 Version 1809 上正式发布了新的 UI 框架,命名为 WinUI 3. 这已经是微软发布的第不知道多少个 UI 框架了,但是微软宣称它将支持原生 C++ 和 W ...

  6. Nginx 根据不同的域名来代理转发内部主机-HTTP和HTTPS

    一.需求 由于公司只有一个公网,很多 web 项目都想通过 80 或 443 端口来访问,所以需要 Nginx 充当公司网关. 把唯一的公网 IP 80 端口和 443 端口跟 Nginx 网关主机 ...

  7. ==和equeals区别以及使用场景

    定义 ==:基本数据类型比较的是值或地址,引用数据类型比较的是地址. equals:在不重写的情况下,和==没有任何区别,重写,可以自定义比较规则,一般重写之后都让其比较值. Object类中的equ ...

  8. bom案例3-放大镜

    <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...

  9. TableView载入WebView的一些小技巧 By 徐

    开发APP的时候,有时候会遇到服务器返回来的数据是一堆html内容,但是又不一定是完整的html ,可能只包含了主要内容,包括一些图片,文字等 然而我们处理带有html标签的数据时,用webview是 ...

  10. Pandas常用操作 - 新增数据列

    初始化测试数据 df = pd.DataFrame({'stu_name': ['Nancy', 'Tony', 'Tim', 'Jack', 'Lucy'], 'stu_age': [17, 16, ...