如何确保我使用“服务器”JVM?

时间:2009-12-02 14:12:14

标签: java jvm

Sun的JVM有两种形式:-client-server,其中服务器VM应该针对长时间运行的进程进行优化,建议用于服务器应用程序。

当我在没有参数的情况下运行java时,会显示使用选项,其中包括以下文字:

    The default VM is server,  
    because you are running on a server-class machine.

看过这个,我没有费心将-server添加到流程启动命令。

但是,在最近的JVM崩溃日志中,我注意到文件末尾附近有以下行:

vm_info: Java HotSpot(TM) Client VM (14.0-b16) for linux-x86 JRE (1.6.0_14-b08), built on May 21 2009 02:01:47 by "java_re" with gcc 3.2.1-7a (J2SE release)

在我看来,Java正在使用客户端虚拟机,尽管它在帮助消息中说明了这一点。我要在我的启动命令中添加-server选项,但现在我很怀疑。所以我的问题是:有没有办法确保我运行的虚拟机真的是服务器虚拟机,而不是强迫JVM崩溃?

操作系统是ubuntu 8.04,但我使用的是从Sun网站下载的JDK 1.6.0_14。

4 个答案:

答案 0 :(得分:11)

你可以做到

System.out.println(System.getProperty("java.vm.name"));

在我的机器上返回:

  

Java HotSpot(TM)客户端VM

  

Java HotSpot(TM)64位服务器VM

当然,你不应该根据这个值做任何关键的事情,因为它将来可能会改变,并且在另一个JVM上会完全不同。

答案 1 :(得分:9)

我有一个非常相似的问题which I asked on ServerFault。我想说,如果您关心运行哪个版本,请始终使用-client或-server。

答案 2 :(得分:1)

好吧,如果您明确地从-server命令行提示开始,那么您正在服务器模式下运行。你可以用这个来检查:

  ManagementFactory.getRuntimeMXBean().getInputArguments();

您可以查看RuntimeMXBean,这可能会打开更多信息,但必须在您运行的特定JVM上进行测试。

答案 3 :(得分:1)

如果您不使用任何一行代码,如果使用JConsole连接到JVM,则在“VM Summary”选项卡下,应该确切地说明正在监视哪个(服务器或客户端)虚拟机。

例如,

Virtual Machine: OpenJDK Server VM version 1.6.0-b09

要使用JConsole远程监视JVM,只需通过使用以下系统属性启动JVM来启用JMX(Java Management Extensions)代理

> java.rmi.server.hostname=[your server IP/Name] // without this, on linux, jconsole will fail to connect to the remote server where JVM is running
> com.sun.management.jmxremote.authenticate=false
> com.sun.management.jmxremote.ssl=false
> com.sun.management.jmxremote.port=[portNum]