当前位置: 代码迷 >> J2SE >> class文件、机器码、机器语言,它们有联系关系吗
  详细解决方案

class文件、机器码、机器语言,它们有联系关系吗

热度:117   发布时间:2016-04-23 20:37:03.0
class文件、机器码、机器语言,它们有关联吗?
和同事聊天,他无意中说到:有人将操作系统编译成机器码,大大加快了系统的执行效率!
看我不懂,他又说:class文件就是机器码。 我大惊,嗯??是这样吗? 幸亏面试官没问我这问题。我不知道class文件是机器码。 他见我楞着,就又说:你用UltraEdit打开class文件,看到的都是0 1 0 1 吧。那就表示它是机器码。嗯?那jpg格式的图片用那工具打开也是0 1 0 1 ,那么,jpg文件也是机器码罗?他立即说,jpg不是,class文件为什么能跨平台,就是因为它是机器码。 
我觉得他说的话似是而非,好像是对的,细想好像又不是那么回事。我只写应用程序,没去想底层的,所以很茫然。就一直追问他,反问他,EXE文件是不是机器码?……  
当时,我的理解就是,机器码就是硬件能够直接运行的。如果某个文件是机器码,那么就是它可以被硬件直接看懂了。可是EXE文件是运行在操作系统之上的。 class文件是运行在JVM上的。如果它们能被硬件看懂,何必要系统和JVM呢?
他只是随口说说,没想到被我搞的。。。。你去网上查吧。

------
机器码,百度百科解释:机器码指的是将硬件序列号经过一系列加密、散列形成的一串序列号。 ,不对吧,怎么是这个解释???? 我找啊找。 汇编语言里有提到“机器语言”。应该是这个吧。机器语言是直接用二进制代码指令表达的计算机语言,指令是用0和1组成的一串代码,它们有一定的位数,并分成若干段,各段的编码表示不同的含义,例如某台计算机字长为16位,即有16个二进制数组成一条指令或其它信息。16个0和1可组成各种排列组合,通过线路变成电信号,让计算机执行各种不同的操作。
class文件呢? class文件径打破了C或者C++等语言所遵循的传统,使用这些传统语言写的程序通常首先被编译,然后被连接成单独的、专门支持特定硬件平台和操作系统的二进制文件。通常情况下,一个平台上的二进制可执行文件不能在其他平台上工作。而Java class文件是可以运行在任何支持Java虚拟机的硬件平台和操作系统上的二进制文件。
---
看完之后,很过瘾。
他说的机器码原来是指的“机器语言”。
class文件是二进制文件,用UltraEdit打开确实是0 1 0 1。但它不是“机器语言”吧!?它只是JVM能识别的二进制文件,可以跨平台,是因为它只对JVM负责。离JVM它也只是废铁。
但是,EXE、JPG 及 操作系统本身,我还是不懂。。。。至少不能用自己的话描述它们。。。

------解决方案--------------------
有人将操作系统编译成机器码,大大加快了系统的执行效率...
------解决方案--------------------
湿了,谁说class文件是机器语言..java都要经过JVM
------解决方案--------------------

 class文件:是字节码文件,是JVM识别的一种文件,Java之所以能跨平台,是因为有了JVM,因为JVM可以跨平台,因为JVM没一个平台都有对应的版本,所以Java编译的class的文件就可以是通用的了。实际上就是你的操作系统不需要识别class文件,只要你的JVM识别就可以了,JVM会把class文件转换成系统识别的东西。


机器码、机器语言:我感觉应该是同一种,就是01010101的那种

这是计算机底层是别的东西。
其实我们所有的预言最终都会被编程机器语言才能执行,因为计算机只识别机器语言,之所以会出现这么多语言,就是因为每一种语言会将编译的文件转换成机器码来执行,语言的效率高低也是这么来的。

汇编语言效率高,是因为汇编语言直接就可以转换成机器语言
C语言比汇编慢一点,就是因为C语言会转换成汇编语言,然后再转换成机器语言执行。


以上是我个人的理解,完全自己的理解,不知道对不对 呵呵 至少我到现在都是这么认为的
------解决方案--------------------
看看。
------解决方案--------------------
虚拟机也是机。
  相关解决方案