Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/364.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JVM是根据操作系统还是CPU体系结构开发的?_Java_Jvm - Fatal编程技术网

Java JVM是根据操作系统还是CPU体系结构开发的?

Java JVM是根据操作系统还是CPU体系结构开发的?,java,jvm,Java,Jvm,我找了很多问题,但没有得到满意的答案。我知道JVM,但我真的不明白oracle是需要为每种类型的CPU制作JVM,还是只为特定的操作系统制作JVM。如果我错了,请纠正我,但我得出的结论是,它是以操作系统为中心的,因为JVM由操作系统作为正常程序运行。如果是这样,oracle是否需要为每个linux发行版开发不同的JVM?但在搜索网页时,我也发现了一些关于该体系结构的文章。我真的很困惑。非常感谢您的帮助。两者都有 例如,让我们以HotSpot JVM为例(OpenJDK和Oracle JDK基于此

我找了很多问题,但没有得到满意的答案。我知道JVM,但我真的不明白oracle是需要为每种类型的CPU制作JVM,还是只为特定的操作系统制作JVM。如果我错了,请纠正我,但我得出的结论是,它是以操作系统为中心的,因为JVM由操作系统作为正常程序运行。如果是这样,oracle是否需要为每个linux发行版开发不同的JVM?但在搜索网页时,我也发现了一些关于该体系结构的文章。我真的很困惑。非常感谢您的帮助。

两者都有

例如,让我们以HotSpot JVM为例(OpenJDK和Oracle JDK基于此JVM)

热点源代码(用C++编写)主要由独立于平台的代码组成,但也包括大量特定于CPU的代码和特定于操作系统的代码。此外,还存在用于特定OS/CPU组合的平台相关代码

这一区别体现在。以下是热点源的组织方式:

+ 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芯片可以执行,这很公平。。。