zoukankan      html  css  js  c++  java
  • 字节码的理解

    什么是字节码?

    java中引入了虚拟机的概念,就是在机器和程序之间加入了一层抽象的虚拟机器。这台机器在各个平台中都给程序提供了接口。

    程序只需要面向虚拟机编程,而不需要管理这套程序是否在什么平台执行。编写好的程序,由解释器来编译后,成为机器可以读懂并且执行的代码。在java中,将虚拟机可以读懂的代码,称之为字节码。这里记住不要混淆了。是将虚拟机可以读懂的代码称之为字节码。也就是java中的class文件。而不是机器可以读懂的代码,机器可以读懂的那个二进制命令。0和1组成的文件。

    Java源码=》编译器=》JVM可执行的Java字节码(虚拟指令或class文件)=》JVM=》JVM解释器=》机器可执行的二进制文件=》程序运行。

    其实问你什么字节码,就相当于校验你是否懂得什么是解释型语言,编译型语言了。

    编译型语言

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

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

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

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

    解释型语言

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

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

    缺点:每次运行的时候都要解释一遍,性能上不如编译型语言。

    代表语言:JavaScript、Python、Erlang、PHP、Perl、Ruby

    采用字节码的好处

    其实上述的文字中,如果有听懂的话,应该已经知道答案了。字节码问的含义就是,什么是解释型语言?字节码的好处就是,解释型语言的优点?

    Java 语言通过字节码的方式,在一定程度上解决了传统解释型语言执行效率低的问题,同时又保留了解释型语言可移植的特点。所以 Java 程序运行时比较高效,而且,由于字节码并不专对一种特定的机器,因此,Java程序无须重新编译便可在多种不同的计算机上运行。

    作者: https://blog.csdn.net/a4171175/article/details/90735888

    ===============================================================

    1.机器码

    是电脑CPU直接读取运行的机器码,运行速度最快,但是非常晦涩难懂,同时也比较难编写;机器码就是计算机可以直接执行,并且执行速度最快的代码;

    用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。手编程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作,编写程序花费的时间往往是实际运行时间的几十倍或几百倍。而且,编出的程序全是些0和1的指令代码,直观性差,还容易出错。现在,除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。

    • 机器语言是微处理器理解和使用的,用于控制它的操作二进制代码。
    • 8086到Pentium的机器语言指令长度可以从1字节到13字节。
    • 尽管机器语言好像是很复杂的,然而它是有规律的。
    • 存在着多至100000种机器语言的指令。这意味着不能把这些种类全部列出来。

    2.字节码

    字节码是一种中间状态的(中间码)的二进制代码(文件),字节码(Bytecode)是一种包含执行程序、由一序列 op 代码/数据对 组成的二进制文件。需要直译器转译后才能成为机器码;字节码通常情况下它是已经经过编译,但与特定机器码无关。字节码通常不像源码一样可以让人阅读,而是编码后的数值常量,引用,指令等构成的序列。字节码与特定的硬件环境无关;字节码的实现方式是通过编译器和虚拟机器。编译器将源码编译成字节码,特定平台上的虚拟机器将字节码转译为可以直接执行的指令。字节码的典型应用为Java bytecode

    3.对比字节码与机器码

    机器码就是说计算机能读懂的代码,简单点说就是给计算机执行的二进制代码.
    字节码,是JAVA语言专有的,它是让JVM来执行的二进制代码
    虽然都是二进制代码,但是由于执行它的环境不一样,所以它们存在一些指令集上的区别

    一,机器码,完全依附硬件而存在~并且不同硬件由于内嵌指令集不同,即使相同的0 1代码 意思也可能是不同的~换句话说,根本不存在跨平台性~比如~不同型号的CPU,你给他个指令10001101,他们可能会解析为不同的结果~
    二,我们知道JAVA是跨平台的,为什么呢?因为他有一个jvm,不论那种硬件,只要你装有jvm,那么他就认识这个JAVA字节码~~~~至于底层的机器码,咱不用管,有jvm搞定,他会把字节码再翻译成所在机器认识的机器码~~~
     
     
    作者: https://blog.csdn.net/qq_35810838/article/details/99294636
  • 相关阅读:
    hdu2328 Corporate Identity
    hdu1238 Substrings
    hdu4300 Clairewd’s message
    hdu3336 Count the string
    hdu2597 Simpsons’ Hidden Talents
    poj3080 Blue Jeans
    poj2752 Seek the Name, Seek the Fame
    poj2406 Power Strings
    hust1010 The Minimum Length
    hdu1358 Period
  • 原文地址:https://www.cnblogs.com/wisir/p/14258695.html
Copyright © 2011-2022 走看看