JVM是根据操作系统还是CPU架构开发的?

时间:2017-01-25 17:12:53

标签: java jvm

我搜索了很多这个问题,但没有得到满意的答复。我知道JVM,但我真的不明白oracle是否需要为每种类型的CPU或仅针对特定的操作系统制作JVM。如果我错了,请纠正我,但我得出结论,它是以操作系统为中心的,因为操作系统将JVM作为正常程序运行。如果是这样,oracle需要为每个Linux发行版开发一个不同的JVM吗?但是在搜索网络时,我发现了有关该架构的文章。我真的很困惑。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:3)

两个

例如,让我们来看看HotSpot JVM(OpenJDK和Oracle JDK基于这个JVM)。

HotSpot源代码(用C ++编写)主要由与平台无关的代码组成,但它们还包含大量特定于CPU的代码和特定于操作系统的代码。此外,还有针对OS / CPU特定组合的平台相关代码。

这种区别反映在directory structure中。以下是HotSpot资源的组织方式:

+ src
|
|--+ cpu
|  |
|  |--- ppc
|  |--- sparc
|  |--- x86
|  |--- zero
|
|--+ os
|  |
|  |--- aix
|  |--- bsd
|  |--- linux
|  |--- posix
|  |--- solaris
|  |--- windows
|
|--+ os_cpu
|  |
|  |--- aix_ppc
|  |--- bsd_x86
|  |--- bsd_zero
|  |--- linux_ppc
|  |--- linux_sparc
|  |--- linux_x86
|  |--- linux_zero
|  |--- solaris_sparc
|  |--- solaris_x86
|  |--- windows_x86
|
|--+ share
   |                
   |--+ vm
      |
      |--- classfile
      |--- compiler
      |--- gc_implementation
      |--- gc_interface
      |--- runtime
      |--- services
      |--- etc.

要为特定平台构建JVM二进制文件,将获取所有相关目录中的源。例如。 HotSpot Linux / x86版本需要sharecpu/x86os/linuxos_cpu/linux_x86

OS / CPU的所有有效组合都是单独构建和测试的。因此,您最终可以在JDK download page上看到一堆特定于平台的二进制文件。

对于不同的Linux发行版,只要目标体系结构相同,就不需要构建单独的二进制文件。 JDK对第三方库的依赖性最小。 JVM与glibc的旧版本相关联,因此几乎可以在任何流行的Linux发行版上运行。