如何查找 java.exe 是 32 位还是 64 位?

Posted

技术标签:

【中文标题】如何查找 java.exe 是 32 位还是 64 位?【英文标题】:How to find if java.exe is 32-bit or 64-bit? 【发布时间】:2017-09-13 06:21:34 【问题描述】:

我有一台装有 Windows 7 Professional 64 位操作系统的笔记本电脑。

它有一个C:\ProgramData\Oracle\Java\javapath 文件夹,其中包含java.exe。我怎么知道这个 JVM 是 32 位还是 64 位?

我右键单击它并打开Properties 窗口并在Detail 选项卡下File version8.0.1210.13。但是没有信息是 32 位还是 64 位。

【问题讨论】:

精确重复但看看:***.com/a/2062263 确保您知道路径中始终存在的内容,因为“java -cp .....”将使用该路径。不是硬编码的 【参考方案1】:

您可以运行C:\ProgramData\Oracle\Java\javapath\java.exe -version。在它打印出的详细信息中,您应该查看它是 32 位还是 64 位版本。

32 位版本将返回有关“客户端虚拟机”或“服务器虚拟机”的信息,而 64 位版本将如此明确地声明。

例如,我机器的输出(诚然,Fedora 25,但原则应该成立):

openjdk version "1.8.0_121"
OpenJDK Runtime Environment (build 1.8.0_121-b14)
OpenJDK 64-Bit Server VM (build 25.121-b14, mixed mode)

【讨论】:

这取决于路径上的哪个 JVM; @srh:显然,如果你想要一个特定的java.exe,请改用C:\ProgramData\Oracle\Java\javapath\bin\java -version @srh,当然,您应该在要评估的可执行文件上显式运行它,而不是指望 PATH。不过,我会编辑我的答案以使其更清楚。 我得到了这个结果java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1.8.0_121-b13) Java HotSpot(TM) Client VM (build 25.121-b13, mixed mode, sharing)。所以根据你的回答,它是 32 位的? @srh 是的。那是一个 32 位的 Java。【参考方案2】:

您可以查看os.arch

System.out.println(System.getProperty("os.arch"));

32 位架构通常由x86_32 或仅x86 表示,64 位架构由x86_64 表示

【讨论】:

这决定了 host 操作系统的架构。这是一个幸运的巧合,这将为 Windows 上的主机操作系统位数和 JVM 位数的所有组合返回所需的值。具体来说,如果 32 位 JVM 在 WoW64 模拟器中运行,则操作系统会对其架构撒谎,并报告 32 位架构。这实际上更像是一个巧合的代码策略,而不是真正的解决方案。 @IInspectable 至少在 Windows 上,os.arch 不是主机操作系统。它是 process 拱门。试试看,或阅读***.com/a/37028080/280534 @KevinSmyth:根据documentation,"os.arch" 属性返回“操作系统架构”。您的链接谈到了一个 JVM 实现,它只是采用快捷方式来实现,我在之前的评论中解释过。它报告调用进程的位数,因为这正是操作系统会报告的,即使是谎言。如果竞争的 JVM 实现选择报告真实的操作系统架构,此解决方案将失败。【参考方案3】:

要可靠地确定可执行映像的位数,您需要工具支持。这可以像十六进制编辑器一样简单,检查PE Image 的内容。您可以按照以下步骤确定二进制文件的机器类型:

    移动到位置 0x3c,并注意那里 4 个字节的值(小端序)。这些是从文件开头到 PE 签名的偏移量。 移动到步骤 1 中记下的位置,并验证这 4 个字节的值是否为 0x50 0x45 0x00 0x00 (PE\0\0)。这是 PE 图像的签名。如果值不同,则这不是可执行映像。 移过签名并注意接下来的 2 个字节(小端序)。该值表示二进制图像的机器类型。 将值与支持的Machine Types 进行比较: 0x014c 对应 x86(32 位)。 0x8664 对应 x64(64 位)。

虽然简单可靠,但需要一定的小心。有更简单的方法,使用其他工具。如果您安装了 Visual Studio,您可以使用 DUMPBIN 在命令提示符下执行以下命令来报告机器类型:

dumpbin.exe /HEADERS <path\to\executable\image> | findstr machine

这将产生以下输出(分别为 x86 和 x64):

         14C machine (x86)

        8664 machine (x64)

如果您没有 Visual Studio 或不想安装它,您可以使用Process Explorer 来确定正在运行的进程的位数。为此,请右键单击 Process 树视图中的相应进程,然后选择 Properties...。在 Image 选项卡上,您会看到进程的位数。

【讨论】:

以上是关于如何查找 java.exe 是 32 位还是 64 位?的主要内容,如果未能解决你的问题,请参考以下文章

如何查找注册表项? 32/64 位

从 Excel 应用程序对象中查找位数(32 位/64 位)?

如何检查给定地址是 32 位还是 64 位?

如何查看eclipse是32位还是64位

win10如何看自己电脑是32位还是64位

如何判断Office是32位还是64位?