用于64位JVM的Java编程

时间:2010-08-10 05:26:29

标签: java 64-bit 32bit-64bit

几个问题:):

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

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

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

如何在64位JVM上运行我的Java应用程序?

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

4 个答案:

答案 0 :(得分:10)

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

32/64位注意事项我见过:

  1. 地址空间 - 如果您不希望处理更多的1.3Gb内存,那么您将看不到差异
  2. 本机库 - 如果您正在加载任何JNI库,那么它们将需要与您的VM架构相匹配。例如,不要尝试从64位vm加载32位本机库(不使用-d32类型的标志)
  3. 是的,相同的代码将在两个JVM上运行。

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

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

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

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

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