2012-08-07 98 views
0

在制作程序时,我如何确保特定的应用程序是64位应用程序或32位应用程序。我如何制作32位或64位应用程序?

是否有可能硬编码的应用程序将分别为64位或32位,如果可能的话,是否有必要使64位应用程序比平常的32位应用程序占用更多的内存?

我知道32位应用程序/硬件的内存限制。

+0

你使用什么编程语言? – 2012-08-07 09:48:47

+0

我正在使用Java。 – Ankit 2012-08-07 09:54:15

+0

只有硬编码使用具有__asm {}汇编程序指令的c/C++头文件库。先生, – 2012-08-07 10:32:23

回答

2

无论是用于32位还是64位,都有一个字节代码。

这意味着您可以在64位JVM上使用任何64位JVM之前在32位机器上编译的库。

64位JVM可以使用更多的内存,但不像您认为的那样多,因为现代64位JVM使用Compressed Oops,因此您可以使用32位引用来处理高达32 GB的堆。 (您也可以使用更多的堆内存)

32位操作系统上的许多32位JVM都限制为1.2至1.5 GB的内存。在64位操作系统上,根据操作系统的不同,此限制可能为2.5至3.5 GB。 64位操作系统上的64位JVM实际上限于大约1TB的内存,但此限制可能会在未来取消(并取决于操作系统)

唯一的区别是,如果您使用JNI。一个JNI共享库依赖于32位或64位库,并且您可能只有一个(在这种情况下,您只能将它加载到具有相同位的JVM上),或者它可能行为不同。

+0

如果我在32位JDK上编译程序并在64位JVM上运行它,它会工作吗? – Ankit 2012-08-07 10:25:01

+0

@Ankit查看我已编辑的答案,回答您发布的问题的答案 – 2012-08-07 10:30:19

+1

在32位JDK上编译的程序与在64位JDK上编译的程序之间没有区别,它将在32位版本上运行相同的程序,位JVM和64位JVM。即您可以在64位JDK上编译并在32位JVM上运行。 – 2012-08-07 10:31:53

1

Java字节码与平台无关。除非你开始调用JNI或类似的东西,那么你不应该担心。

您可以告诉JVM是否以32位或64位模式运行。

0

没有32位/ 64位Java程序这样的事情。

这是JVM本身是在不同的体系结构上开发的,但Java规范是固定的,并且不会随底层硬件而改变。

4

Java是平台独立的。因此,你不应该为此而烦恼。 32和64之间的唯一区别在于使用的jdk。

如果您使用的是64位的JDK,您的应用程序是兼容64位

如果您使用的是32位JDK,您的应用程序是兼容32位软件

如果我编译在32位JDK上运行程序并在64位JVM上运行它 可以工作吗?

是的,它会因为你实际上没有编译它,你只是创建一个字节码。

当JVM加载你的类时,它会在那个时候检查jdk是64位还是32位,并使你的jvm分别为64位或32位。

+0

但不编译将创建字节码的程序。如果我错了,请纠正。 – Ankit 2012-08-07 10:37:29

+0

@Ankit字节码不是机器码。字节码甚至不关心你有什么jdk – 2012-08-07 11:30:29

0

创建java应用程序后,建立并得到最终.jar文件(如果该应用程序包括第三方罐,吃出jar文件还)。

  • 然后用exe4j应用程序,你可以轻松地x64x32

  • 创建自己的 .exe文件可以从this链接下载exe4j的。

相关问题