如果没有指定像-d32或-d64这样的选项,64位JVM是否会以64位模式运行?

15
我在64位Centos机器上安装了一个64位Java。我的问题是,如果我没有指定-d64选项,即使没有安装32位JVM,JVM是否会以32位模式运行?
另外,我有点好奇我们是否可以在“javac”中使用“-d64”选项。如果是这样,那么它意味着什么或者在哪里可以使用?我在阅读该文章时注意到这一点。
谢谢
2个回答

3
数据模型(位数)的选择是为了限制应用程序仅在一种模式下运行。Java字节码被设计为可以在两种数据模型下工作,因此对于100%纯Java应用程序,将根据每个架构的行为和优点进行工作。
但是,如果您的应用程序使用仅在一种模式下工作的本地库,则该应用程序将在不支持的模式下失败。因此,您必须明确指示应用程序应在哪种模式下运行。
当您设置-d32或-d64时,如果应用程序无法在所选模式下运行,则JRE将不会启动您的应用程序。

1
所以,这意味着如果我在64位机器上运行Java代码而没有指定任何选项(-d32或-d64),它将以64位模式运行……对吗? - Twaha Mehmood
1
没错,这就是Java的美妙之处! - Daniel De León

2
根据您提供的Oracle文档,如下所述: 如何在32位和64位操作之间选择?默认是什么? Java启动器添加了-d32和-d64选项,以指定程序是否在32位或64位环境中运行。在Solaris上,它们分别对应于ILP32和LP64数据模型。由于Solaris在同一Java安装中包含32位和64位J2SE实现,因此可以指定任一版本。如果未指定-d32或-d64,则默认为在32位环境中运行。 其他Java命令(javac、javadoc等)很少需要在64位环境中执行。但是,可以将-d32/-d64选项传递给这些命令,然后使用已建立的-J前缀选项(例如:-J-d64)传递给Java启动器。 所有其他平台(Windows和Linux)都包含单独的32位和64位安装包。如果在系统上安装了两个软件包,则可以通过将相应的“bin”目录添加到路径中来选择其中一个。出于一致性考虑,Linux上的Java实现接受-d64选项。
根据文档,Java的默认设置是在32位JRE中运行,并且可以通过传递-J-d64而不是简单的-d64来在64位JRE中运行javac。
但是,请注意,该文档还表示,它适用于Java 1.4,并且没有涉及到更高版本的Java。

这意味着除非指定了“-d64”,否则64位机器上的64位JVM将以32位模式运行......是吗? - Twaha Mehmood
@tm.sauron 根据Java 1.4的文档,是的。 - Adam Mihalcin
但是@tm.sauron正在运行Linux的CentOS。根据最后一段(所有其他平台...)的描述,如果您安装64位JRE,则默认启用d64。听起来d32和d64只对Solaris有意义。 - Smartmarkey

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