如何查找 java.exe 是 32 位还是 64 位?
How to find if java.exe is 32-bit or 64-bit?
我有一台装有 Windows 7 Professional 64 位操作系统的笔记本电脑。
它有一个 C:\ProgramData\Oracle\Java\javapath
文件夹,其中包含 java.exe
。我怎么知道这个 JVM 是 32 位还是 64 位的?
我右键单击它并打开 Properties
window 在 Detail
选项卡下 File version
是 8.0.1210.13
。但是没有信息是32位的还是64位的。
你可以运行C:\ProgramData\Oracle\Java\javapath\java.exe -version
。在它打印出的详细信息中,您应该看到它是 32 位还是 64 位版本。
32 位版本将 return 关于 "Client VM" 或 "Server VM" 的内容,而 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)
您可以查看 os.arch
System.out.println(System.getProperty("os.arch"));
32 位架构通常由 x86_32
或 x86
表示,64 位架构通常由 x86_64
表示
要可靠地确定可执行映像的位数,您需要工具支持。这可以像十六进制编辑器一样简单,来检查 PE Image 的内容。您可以按照以下步骤确定二进制文件的机器类型:
- 移动到位置 0x3c,并记下那里 4 个字节的值(小端顺序)。这些是从文件开头到 PE 签名的偏移量。
- 移动到步骤 1 中记下的位置,并验证 4 个字节的值是否为
0x50
0x45
0x00
0x00
(PE[=17=][=17=]
).这是 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)
or
8664 machine (x64)
如果您没有 Visual Studio 或不想安装它,您可以使用 Process Explorer 来确定 运行 进程的位数。为此,请右键单击 Process 树视图中的相应进程,然后 select Properties...。在 Image 选项卡上,您会看到进程的位数拼写。
我有一台装有 Windows 7 Professional 64 位操作系统的笔记本电脑。
它有一个 C:\ProgramData\Oracle\Java\javapath
文件夹,其中包含 java.exe
。我怎么知道这个 JVM 是 32 位还是 64 位的?
我右键单击它并打开 Properties
window 在 Detail
选项卡下 File version
是 8.0.1210.13
。但是没有信息是32位的还是64位的。
你可以运行C:\ProgramData\Oracle\Java\javapath\java.exe -version
。在它打印出的详细信息中,您应该看到它是 32 位还是 64 位版本。
32 位版本将 return 关于 "Client VM" 或 "Server VM" 的内容,而 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)
您可以查看 os.arch
System.out.println(System.getProperty("os.arch"));
32 位架构通常由 x86_32
或 x86
表示,64 位架构通常由 x86_64
要可靠地确定可执行映像的位数,您需要工具支持。这可以像十六进制编辑器一样简单,来检查 PE Image 的内容。您可以按照以下步骤确定二进制文件的机器类型:
- 移动到位置 0x3c,并记下那里 4 个字节的值(小端顺序)。这些是从文件开头到 PE 签名的偏移量。
- 移动到步骤 1 中记下的位置,并验证 4 个字节的值是否为
0x50
0x45
0x00
0x00
(PE[=17=][=17=]
).这是 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)
or
8664 machine (x64)
如果您没有 Visual Studio 或不想安装它,您可以使用 Process Explorer 来确定 运行 进程的位数。为此,请右键单击 Process 树视图中的相应进程,然后 select Properties...。在 Image 选项卡上,您会看到进程的位数拼写。