为什么java编译器要将java代码转为字节码(byte)?为什么不可以直接转为位(bit)?那样的话计算机不就可以直接读取了么?为什么还需要虚拟机呢?这么做的原因是什么?
java编译器要将java代码转为Unicode字节码(byte)主要原因是为了实现跨平台,因为在不同的机器字长的机器上表示相同的数据类型数据需要的字节数是不同的,而一个字节是固定由8位二进制数表示,如果我们直接编译转为bit,等于是根据编译程序的机器环境已经确定了表示该数据类型需要的字节数,这样的后果是可能会造成所给的字节数小于程序目标使用机器实际上表示该数据类型的需要而缩小该数据类型的数值表示范围,从而导致数值越界造成程序出现Bug。而JVM就像Java程序和机器硬件之间的一座桥梁,前面得到的Unicode字节码(byte)组成的.class文件根据机器硬件环境来进行编译,从而使应用程序能在各种平台上运行一致。
我的理解是:
首先字节码是在jvm上运行的的,而jvm是用来实现跨平台的,因为不同机器可识别的机器语言是不同的,所以就需要一个中间平台来做桥接,jvm就起到了这个作用,只要在不同的平台下部署相应的jre,运行jvm,这样java就实现的所谓的跨平台,但这是以牺牲部分效率来实现的。
1:java代码可以直接编译成本地代码。直接在本地运行。你去查资料。需要专门的编译器。
2:java宣传理念就是一处编译,4处运行。为了在不同平台上运行相同的代码,不得不弄个虚拟机(jvm)出来
编译成本地代码,执行效率如何?
一句话,为了跨平台。加上jvm这一虚拟层,就可以把底层的东西给封装,隐藏。
JIT可以在运行时编译成本地代码的,现代的JVM一般都能实现。