Java JVM是根据操作系统还是CPU体系结构开发的?
我找了很多问题,但没有得到满意的答案。我知道JVM,但我真的不明白oracle是需要为每种类型的CPU制作JVM,还是只为特定的操作系统制作JVM。如果我错了,请纠正我,但我得出的结论是,它是以操作系统为中心的,因为JVM由操作系统作为正常程序运行。如果是这样,oracle是否需要为每个linux发行版开发不同的JVM?但在搜索网页时,我也发现了一些关于该体系结构的文章。我真的很困惑。非常感谢您的帮助。两者都有 例如,让我们以HotSpot JVM为例(OpenJDK和Oracle JDK基于此JVM) 热点源代码(用C++编写)主要由独立于平台的代码组成,但也包括大量特定于CPU的代码和特定于操作系统的代码。此外,还存在用于特定OS/CPU组合的平台相关代码 这一区别体现在。以下是热点源的组织方式:Java JVM是根据操作系统还是CPU体系结构开发的?,java,jvm,Java,Jvm,我找了很多问题,但没有得到满意的答案。我知道JVM,但我真的不明白oracle是需要为每种类型的CPU制作JVM,还是只为特定的操作系统制作JVM。如果我错了,请纠正我,但我得出的结论是,它是以操作系统为中心的,因为JVM由操作系统作为正常程序运行。如果是这样,oracle是否需要为每个linux发行版开发不同的JVM?但在搜索网页时,我也发现了一些关于该体系结构的文章。我真的很困惑。非常感谢您的帮助。两者都有 例如,让我们以HotSpot JVM为例(OpenJDK和Oracle JDK基于此
+ 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\U cpu/Linux\U x86
所有有效的OS/CPU组合都是单独构建和测试的。因此,您最终可以在上看到一堆特定于平台的二进制文件
对于不同的Linux发行版,只要目标体系结构相同,就不需要构建单独的二进制文件。JDK对第三方库的依赖性最小。JVM与一个相当旧的
glibc
版本相链接,因此它几乎可以在任何流行的Linux发行版上运行。非常清楚的答案是转到Oracle java下载页……这要看情况而定。JVM是用本机代码编写的,这可能意味着C++、C甚至汇编。如果您在平台无关的C++中编写JVM,那么您只需要为每个平台(OS)重新编译。如果在汇编中编写JVM,则需要为每个CPU重写。由于Oracle的JVM只有几个版本(Windows、macOS、Linux),因此可以得出一些结论。但这只是Oracle的版本,相当一部分Java是用Java编写的。你看。@ElliottFrisch有人可能会说Java的全部都是用Java编写的——JDK和编译器。JVM是一个完全独立的野兽…@Boristespider一些ARM芯片可以执行,这很公平。。。