32位Java编译器生成的.class文件能否在64位系统上使用64位JVM?

5

32位Java编译器生成的.class文件能否在64位系统上使用64位JVM?


4
可能是Java 32位与64位的兼容性问题的重复问题。 - stacker
@user518796:只要32位的.class文件不是针对比64位JVM更新的Java版本,就可以。使用Java 6 / 32位创建.class文件并尝试在64位Java 5 VM上运行它会导致程序崩溃!(这与32/64位无关,但值得一提)。 - Gugussee
5个回答

8

是的,Java字节码与32/64位系统无关。

这就是主要目的:编译后的代码应该可以在 任何 系统上执行,只需为特定系统架构编译虚拟机即可。


64位JDK编译的代码与32位JDK编译的代码相比,在64位运行时是否有性能提升? - jay

6

是的,字节码仍然非常高级。在这个级别上没有32位和64位之分,就像没有32位和64位的Java代码(.java)一样。


4

是的,64位虚拟机的主要区别在于可以访问更大的内存空间。

Java语言最重要的特点之一就是编译生成的.class文件可以在任何Java系统上运行,不论底层硬件如何。

您的程序可以在32位和64位系统上运行,但是如果必要的话,只要硬件和操作系统能够胜任,在64位虚拟机上运行时,程序将能够访问更多的内存空间,而在32位虚拟机上则无法做到这点。


2
是的,两个版本的Java编译器生成的编译后字节码是相同的。

0

字节码,顾名思义使用基于字节的指令,如果说有什么东西是更加8位为中心的,那就是字节码。你应该期望32位编译器和64位编译器生成相同的代码。

编译器之间唯一的区别在于JVM的本机位大小,它在编译时运行编译器。你不应该期望它们表现出非常不同,除了64位版本无法在32位操作系统上运行。


1
字节码并不是“8位为中心”的,因为“byte”这个词是什么意思都不清楚。Java有整数类型intlong,它们始终是32位和64位,独立于底层操作系统。 - Jesper
1
就像我所说的那样,指令是基于字节的。指令的大小是字节的倍数。最常见的指令长度为一个字节。8086支持32位值,早在80386被认为是该系列中第一款32位处理器之前就已经支持了。 - Peter Lawrey
你有什么建议可以让我澄清它。字节码中唯一的位数是以字节为中心的指令,正如其名称所示。我认为大多数人认为它没有任何意义,但如果你看设计,它确实有意义。 - Peter Lawrey

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接