能否通过参数“-d32”强制64位JVM使用32位模式?

17

我有一些第三方本地库,只能在32位的JVM下在Windows、OSX和Linux上运行。因此,我需要始终强制Java应用程序以32位JVM模式运行。

如果目标系统仅安装了64位JVM,那么是否可以强制其以32位模式运行Java应用程序?


@MockerTim:金钟宇说他的应用程序有一个本地的第三方库。这里质疑的不是Java字节码。 - user314104
据我所知,只有 OS X 版本的 Java 支持“-d32”标志。 - Mot
你需要明确一些细节。这是Oracle JVM吗? - Thorbjørn Ravn Andersen
3个回答

16

不行。

你所指定的前提条件禁止(好吧,我排除了捆绑JVM解决方案和安装JVM解决方案)应用程序在32位JRE上运行。如果您想在32位JVM中运行应用程序,并且您的第三方本地库仅可用作32位DLL,则必须使用32位JVM。64位JVM无法加载32位库;没有32位模式来加载这样的库。

解决方案包括:

  • 要求安装32位JVM
  • 捆绑32位JVM(三个操作系统-这将是一个相当大的负担)
  • 为用户安装32位JVM
  • 使用不同的第三方库/自己编写/查找第三方库的64位版本

2
附带说明:如果你打算部署到 64 位的 Java 目标,可能会发现 https://dev59.com/Gk7Sa4cB1Zd3GeqP0hMW#2925549 讨论的一个可能性很有趣。通过使用两个 JVM,一个是 32 位的,另一个是 64 位的,你可以在 32 位的 JVM 上使用 RMI/CORBA 并托管库的服务,而仍然可以在应用程序中使用 64 位的 JVM,享受 64 位 VM 的好处。 - user314104
所以我猜这意味着我需要购买一个安装程序,将所需的JVM捆绑在一起。 - KJW
1
这是一种处理方式。您还可以使用安装程序,从Web安装适合用户的正确JVM(如果用户计算机上不存在JVM)。 - user314104
还有其他方法吗?目标是捆绑32位JRE并使我的应用程序使用它。可能可以将32位JRE复制到我的应用程序文件夹中,编写一个.bat或.bash文件来使用该捆绑的JRE启动应用程序? - KJW
1
对于Windows系统,是的,这很容易。.cmd批处理文件看起来应该像这样:"%dp0jre\bin\javaw.exe" -jar "%dp0app\main.jar"。这仅适用于基于NT的现代Windows版本。我一直在尝试在*nix中找到一个好的解决方案,但我还没有找到。 - user314104
显示剩余2条评论

11

在 Java 6 中不支持,在 Java 7 及以上版本中才支持。

在 Java 7 中,请使用 -d32 参数。


2
你漏掉了他说的那部分内容:“如果目标系统只安装了64位JVM,是否有可能强制其以32位模式运行Java应用程序?” -d32仍需要32位JRE。 - user314104
1
使用Java 1.8(64位)时,我收到以下错误消息:java -d32 错误:此Java实例不支持32位JVM。 请安装所需版本。 - Tim Bartsch
这个Oracle FAQ建议-d32/-d64选项只在Solaris上有用;在Windows/Linux上,您需要安装适当的32位或64位JVM,并明确运行您想要的那个(例如,通过将其包含在系统路径中)。 - Ian Renton
JDK 10 删除 -d32 选项 - Mister_Tom

1
能否通过参数“-d32”强制64位JVM使用32位模式?
由于java命令没有这样的参数,答案显然是“不行”。

我认为你是不正确的,因为-d32-d64都在这里有记录:http://docs.oracle.com/javase/7/docs/technotes/tools/solaris/java.html。 - rozky

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