可以通过参数“-d32”强制 64 位 JVM 使用 32 位模式吗?
Posted
技术标签:
【中文标题】可以通过参数“-d32”强制 64 位 JVM 使用 32 位模式吗?【英文标题】:possible to force a 64-bit JVM to use 32-bit mode via the argument "-d32"? 【发布时间】:2012-01-12 12:53:12 【问题描述】:所以我有一些仅在 windows、osx、linux 的 32 位 JVM 中工作的第 3 方本机库,我需要始终强制 Java 应用程序以 32 位 JVM 模式运行。
如果目标系统只安装了 64 位 JVM,是否可以强制它以 32 位模式运行 java 应用程序?
【问题讨论】:
@MockerTim:Kim Jong Woo 说他的应用程序有一个原生的第三方库。这里讨论的不是 Java 字节码。 IIRC,只有 OS X Java 版本支持-d32
标志。
您需要具体。这是 Oracle JVM 吗?
【参考方案1】:
没有。
您指定的先决条件禁止(好吧,我排除了捆绑 JVM 解决方案和安装 JVM 解决方案)应用程序在 32 位 JRE 中运行。如果您想在 32 位 JVM 中运行您的应用程序,并且您的第三方本机库仅作为 32 位 DLL 提供,那么您必须使用 32 位 JVM。 64 位 JVM 无法加载 32 位库;没有 32 位模式可以加载此类库。
解决方案包括:
需要安装 32 位 JVM 捆绑 32 位 JVM(三个操作系统 - 这将是一个相当大的负担) 为用户安装 32 位 JVM 使用不同的第三方库/自行开发/查找第三方库的 64 位版本【讨论】:
附带说明:***.com/a/2925549/314104 讨论了一种可能性,如果您打算部署到 64 位 Java 目标,您可能会觉得有趣。使用两个 JVM,一个 32 位和一个 64 位,您可以使用 RMI/CORBA 并在封装库的 32 位 JVM 上托管服务,您仍然可以将 64 位 JVM 用于您的应用程序,绘制64 位 VM 的优势。 所以我想这意味着我需要购买一个安装程序来捆绑所需的 JVM。 这是接受它的一种方式。如果用户的计算机上不存在 JVM,您还可以使用安装程序从 Web 为用户安装正确的 JVM。 还有其他方法吗?目标是捆绑 32 位 JRE 并让我的应用程序使用它。可能以某种方式将 32 位 JRE 复制到我的应用程序的文件夹中,编写一个 .bat 或 .bash 文件以使用捆绑的 JRE 来启动应用程序? 对于 Windows,是的,这很容易。 .cmd 批处理文件类似于“%~dp0jre\bin\javaw.exe”-jar “%~dp0app\main.jar”。这仅适用于基于 NT 的现代版本的 Windows。我一直试图在 *nix 中找到一个好的解决方案,但我还没有找到。【参考方案2】:对于 Java 6,没有。使用 Java 7+,是的。
在 Java 7 中使用 -d32
【讨论】:
您错过了他所说的“如果目标系统只安装了 64 位 JVM,是否可以强制它以 32 位模式运行 java 应用程序呢?”。 -d32 仍然需要 32 位 JRE。 使用 java 1.8 (64bit) 我收到以下错误消息:java -d32
Error: This Java instance does not support a 32-bit JVM. Please install the desired version.
This Oracle FAQ 建议 -d32/-d64 选项仅在 Solaris 上有用;在 Windows/Linux 上,您需要安装适当的 32 位或 64 位 JVM 并专门运行您想要的(例如,通过将其包含在系统路径中)。
JDK 10 removes -d32 option【参考方案3】:
可以通过参数强制 64 位 JVM 使用 32 位模式 “-d32”?
由于java
命令没有这样的论据,答案显然是“否”。
【讨论】:
我不认为你是正确的,因为-d32
和 -d64
都记录在这里:docs.oracle.com/javase/7/docs/technotes/tools/solaris/java.html以上是关于可以通过参数“-d32”强制 64 位 JVM 使用 32 位模式吗?的主要内容,如果未能解决你的问题,请参考以下文章