讨论/技术交流/诸位,关于JVM虚拟机,有一段话读着不是很明白,,求教/
诸位,关于JVM虚拟机,有一段话读着不是很明白,,求教

计算机只能识别0 1 。但由于最近十年内虚拟机以及大量建立在虚拟机之上的程序语言如雨后春笋般出现并蓬勃发展,把我们编写的程序编译成二进制本地机器码(Native Code),已不再是唯一的选择, 越来越多的程序语言选择了与操作系统和机器指令集无关的平台中立的格式作为程序编译后的存储格式。

这个:”与操作系统和机器指令集无关的平台中立的格式“和:”作为程序编译后的存储格式“怎么理解
来自《深入理解java虚拟机-JVM高级特性与最佳实践》第三版,第六章。6.1概述。。

共 3 个回复

C/C++这类语言直接编译为机器码,与操作系统、机器指令集强关联,x86架构编译的程序不能跑在ARM上,需要重新编译。

Java自己设计了一套字节码,与硬件平台无关,程序编译时生成字节码文件,运行时由不同平台的虚拟机将字节码翻译为对应的机器码运行。

字节码和操作系统、机器指令集是无关的,Java程序编译成字节码进行储存。

2

正常的Java文件是.Java后缀的,编译后会出现一个.class文件。这个.class文件就是平台无关的中立格式,同样的.class文件在不同平台的Java虚拟机上会被再翻译成不同的机器语言,对应于不同系统的指令集,从而实现同样的操作。这就是Java可以跨平台。

个人理解:2进制可以被硬件处理,也依赖不同的硬件。中立格式就是加了一层虚拟语言,屏蔽硬件实现的差异。