0

是否有任何 Java 代码结构只能在您使用 64 位 JDK 时才能编译,或者在 Java 世界中这可能吗?

4

3 回答 3

1

绝对不是在编译级别。Java 编译器不知道它将在哪种 JVM 中运行,并且 .class 文件中没有任何特定于 JVM 的内容。您可能会遇到的唯一区别是在运行时,但再一次,没有 Java 构造可以识别它。您可以阅读架构系统属性,但我很确定这不是您的目标。

至于评论中的“下一个问题”,JDK 贡献了完整的 Java 堆栈,包括源代码、编译的字节码和 JVM。您已经猜到,32 位和 64 位 JDK 之间的区别在于 JVM 部分。

于 2012-11-30T09:40:56.240 回答
1

Java 专门设计用于保护它的用户免受平台字长等因素的影响,无论是 32 位还是 64 位。一般来说,不可能用对此敏感的语言来构造任何东西。

因此,所有用 Java 编写的代码都应该在任何平台上编译。

此外,编译器应该能够在任何平台上运行,但由于它们可以用本机代码编写,因此在技术上可能存在阻止其中一个在特定平台上运行的错误在技术上是可行的。

使用 JNI(Java 本地接口)可能会出现一些问题,但这通常是在 C/C++ 代码调用和从 Java 调用中。

于 2012-11-30T09:45:12.243 回答
0

Java 编译器不知道底层硬件。

Java Source ----> Java Compiler ------> Bytecode (Hardware Independent)

字节码 -------> Java 运行时 -------->机器级代码(平台/硬件相关)

因此,在一个硬件上运行的 Java 代码不可能在另一个硬件上运行。

第二个问题的答案是,为了为字节码创建机器级代码,运行时必须知道底层硬件支持哪些操作。

32 位和 64 位机器的指令不同。

于 2012-11-30T09:44:45.670 回答