在Java中更改JVM

我最近才发现了wiki页面上的不同JVM,并且想着开始尝试一下。但是在Ubuntu上找到关于如何配置Java的文档确实有些困难。
假设我想要更改正在使用的JRE或JDK,我可以打开终端并输入以下命令:
sudo update-alternatives --config java

然后从安装的版本中选择一个。
如果我正确理解 JVM(我可能没有),您可以配置 openJDK 使用替代的 JVM(例如 JAMVM)并运行它。
jamvm -jar foo.jar

2个问题,
1:我对JVM的概念理解正确吗?也就是说,这是可能的吗?
2:如果是的话,我该如何配置JVM并将默认设置更改为我选择的JVM?

太棒了,给你的问题添加一个好答案(你可以自己回答),然后赢得一些点赞吧! - Bruno Pereira
@BrunoPereira 完成了!希望这样就包括了全部。 - OVERTONE
2个回答

随意使用这个作为在运行时调试 Java 的参考。
选择你的 JRE
要选择你的JRE,请使用
sudo update-alternatives --config java

这将产生以下输出。

  Selection    Path                                            Priority   Status
------------------------------------------------------------
  0            /usr/lib/jvm/java-6-openjdk/jre/bin/java         1061      auto mode
* 1            /usr/lib/jvm/java-6-openjdk/jre/bin/java         1061      manual mode
  2            /usr/lib/jvm/java-6-sun/jre/bin/java             63        manual mode
  3            /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java   1051      manual mode

您可以通过数字选择来选择您想要的Java运行时。

选择你的JVM

Sun/Oracle有两个JVM选择,-server和-client。 如果你选择OpenJDK作为你的Java运行环境,你还有其他选项。

当你在终端输入java而没有其他参数时,帮助列表会列出几个可选的虚拟机。我不确定OpenJDK附带哪些,但有三个流行的选择是JamVM、Zero和Cacao。

要使用这些,只需简单地输入

java -jamvm 'your other parameters here'
java -cacao 'your other parameters here'
java -zero 'your other parameters here'
java -server 'your other parameters here

-server VM通常是默认选项。您也可以指定-client,但在64位IcedTea6中,它似乎运行与-server相同的版本。 可能还有其他选项,但我发现默认选项最响应。


设置内存

最后,讲一下如何设置Java的内存(只是因为好奇)

java -Xmx1024m -Xms128m 'your other parameters here'

这将限制Java程序允许的内存最大为1024 MB,并将其初始内存大小设置为128 MB。这是定义最低系统要求的好方法。Java 6 man page中的java命令描述了这些选项和其他选项。
就这些了。如果有人对Ubuntu有额外的Java调整,请在评论中留下,我会添加它们。

在$JAVA_HOME/bin和$JAVA_HOME/jre/bin目录下大约有47个可执行文件,这些文件需要一个脚本来更新alternatives系统中的所有条目。请查看/usr/lib/jvm/.java*.jinfo文件。 - user unknown
如何设置默认的JVM?据我所知,-server启动时间很长,那为什么用户安装时不将-client设为默认值呢? - dhardy
有没有办法实际改变默认设置,或者每次都必须明确设置JVM和内存限制(或在每个启动脚本中设置)? - aij

要在OpenJDK安装中设置默认的JVM,您需要编辑位于/usr/lib/jvm/java-version-openjdk-arch/jre/lib/arch/jvm.cfg的配置文件。
Ubuntu根据OpenJDK版本,在/etc/目录下公开了jvm.cfg文件。 /etc/java-6-openjdk/jvm-arch.cfg 或者 /etc/java-7-openjdk/jvm-arch.cfg
jvm.cfg文件中最顶部的-jvmname KNOWN行确定了默认的JVM。
目前没有可用的配置工具,因此您必须手动定位和编辑这些文件。