字节码(英语: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. SpringBoot整合Nacos自动刷新配置

    目的 Nacos作为SpringBoot服务的注册中心和配置中心. 在NacosServer中修改配置文件,在SpringBoot不重启的情况下,获取到修改的内容. 本例将在配置文件中配置一个 cml ...

  2. Transformer模型详解

    2013年----word Embedding 2017年----Transformer 2018年----ELMo.Transformer-decoder.GPT-1.BERT 2019年----T ...

  3. Go语言切片一网打尽,别和Java语法傻傻分不清楚

    前言 我总想着搞清楚,什么样的技术文章才算是好的文章呢?因为写一篇今后自己还愿意阅读的文章并不容易,暂时只能以此为目标努力. 最近开始用Go刷一些题,遇到了一些切片相关的细节问题,这里做一些总结.切片 ...

  4. springcloud 负载均衡之 ribbon。

    一.什么是 ribbon? 就是负载均衡! nginx也是负载均衡 1.1 !!!!ribbon和nginx的区别是什么? /* nginx: 正向代理(和客户端连在一起) 反向代理(和服务器端连在一 ...

  5. HowToDoInJava 其它教程 2 · 翻译完毕

    原文:HowToDoInJava 协议:CC BY-NC-SA 4.0 欢迎任何人参与和完善:一个人可以走的很快,但是一群人却可以走的更远. ApacheCN 学习资源 目录 JMS 教程 JMS 教 ...

  6. eslint规则详解

    { // 环境定义了预定义的全局变量. "env": { //环境定义了预定义的全局变量.更多在官网查看 "browser":true, "node& ...

  7. CF1278E Tests for problem D

    不难发现为了逐步确定每个点于其相邻点的相交情况,那么我们只可能有两种逐步构造的方式:从根开始往下构造,以及从子树往根上构造.经过很久的尝试,我发现从根往下构造是一件很困难的事情,于是我们可以反过来考虑 ...

  8. Jackson 的 基本用法

    Jackson 是当前用的比较广泛的,用来序列化和反序列化 json 的 Java 的开源框架.Jackson 社 区相对比较活跃,更新速度也比较快, 从 Github 中的统计来看,Jackson ...

  9. 入门-k8s集群环境搭建(二)

    对于 Kubernetes 初学者,在搭建K8S集群时,推荐在阿里云或腾讯云采购如下配置:(您也可以使用自己的虚拟机.私有云等您最容易获得的 Linux 环境) 至少2台 2核4G 的服务器 Cent ...

  10. Activity的生命周期 (必须掌握)

      onCreate 方法 当Activity第一次启动的时候调用   onDestroy 方法 当Activity销毁的时候调用   onStart() 方法 当Activity变成可见的时候调用  ...