我搜索了很多这个问题,但没有得到满意的答复。我知道JVM,但我真的不明白oracle是否需要为每种类型的CPU或仅针对特定的操作系统制作JVM。如果我错了,请纠正我,但我得出结论,它是以操作系统为中心的,因为操作系统将JVM作为正常程序运行。如果是这样,oracle需要为每个Linux发行版开发一个不同的JVM吗?但是在搜索网络时,我发现了有关该架构的文章。我真的很困惑。任何帮助表示赞赏。
答案 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版本需要share
,cpu/x86
,os/linux
和os_cpu/linux_x86
。
OS / CPU的所有有效组合都是单独构建和测试的。因此,您最终可以在JDK download page上看到一堆特定于平台的二进制文件。
对于不同的Linux发行版,只要目标体系结构相同,就不需要构建单独的二进制文件。 JDK对第三方库的依赖性最小。 JVM与glibc
的旧版本相关联,因此几乎可以在任何流行的Linux发行版上运行。