用于64位JVM的Java编程

几个问题:):

如何识别当前安装的JVM? (64位/ 32位)

在为64位JVM目标平台编程时,是否需要做一些考虑?

我的Java代码可以在32位以及64位JVM上运行吗?

如何在64位JVM上运行我的Java App?

如何识别我的Java App使用的JVM?

通常情况下,64位jvm会识别自己。

我看到32/64位注意事项:

  1. 地址空间 – 如果你不期望能够解决更多的1.3Gb内存,那么你就不会看到差异
  2. 本机库 – 如果您正在加载任何JNI库,那么它们将需要与您的VM架构相匹配。 例如,不要尝试从64位vm加载32位本机库(不使用-d32类型的标志)

是的,相同的代码将在两个JVM上运行。

我认为系统属性“sun.arch.data.model”具有32/64标志。

这里有一些有用的信息: http : //www.oracle.com/technetwork/java/hotspotfaq-138619.html

在您自己的Java代码中,您不必对32位或64位执行任何特殊操作。 与例如C和C ++不同,Java中的int总是32位, long总是64位(在C和C ++中,这些类型的大小取决于系统)。

没有单独的32位和64位版本的Java字节码; 字节码完全相同,无论您运行它的JVM是32位还是64位。 您不必为32位或64位不同地编译Java源代码。 关于function,如果它在32位或64位JVM上运行,则对Java应用程序无关紧要。

jowierun已经提到过可能存在一些技术差异。 可能还存在性能差异; 例如,Oracle的64位JVM for Windows与32位JVM的调优方式不同,它还进行了其他JIT优化。 我自己注意到了我最近编写的计算密集型应用程序; 在64位JVM上,它运行速度比在32位JVM上快得多。 (但这只是一个例子,不要把它当作任何程序在64位JVM上运行得更快的证据)。

如果您计划使用Java Native Interface(JNI)编写本机代码,则必须特别注意编写将在64位和32位计算机上运行的正确C代码。 确保在向/从java代码传递参数时使用正确的Java类型(JNI为java类型提供了一组typedef),尤其是在转换数组时。 在测试本机代码时,使用不同的JVM测试两种体系结构(-m32将强制GNU gcc上的32位arch)。

你有这些问题回到最前面。

  1. 您不必在Java代码中执行任何操作,它将在32位和64位上运行。
  2. 因此,您不需要知道它是否是64位JVM。