Java 如何确定JVM实例上是否设置了-server选项

Java 如何确定JVM实例上是否设置了-server选项,java,jvm,jvm-arguments,Java,Jvm,Jvm Arguments,我试图确定JVM(使用JDK1.7u3)-server选项是否在我的JVM实例上默认启用。基于我的环境(Windows2008ServerR2)和我期望的设置,尽管我想明确知道。当然,我可以使用这个选项显式地启动JVM,我很可能会这样做,尽管有一种简单的方法来确定它 我已经尝试过以下方法,尽管它们似乎都没有明确说明我在寻找什么。也许它被编码在其他一些细节中 通过jVisualVM查看JVM并查看JVM参数,这些参数没有明确列出 通过编程尝试查看JVM参数,与通过jVisualVM观察到的参数相匹

我试图确定JVM(使用JDK1.7u3)-server选项是否在我的JVM实例上默认启用。基于我的环境(Windows2008ServerR2)和我期望的设置,尽管我想明确知道。当然,我可以使用这个选项显式地启动JVM,我很可能会这样做,尽管有一种简单的方法来确定它

我已经尝试过以下方法,尽管它们似乎都没有明确说明我在寻找什么。也许它被编码在其他一些细节中

  • 通过jVisualVM查看JVM并查看JVM参数,这些参数没有明确列出
  • 通过编程尝试查看JVM参数,与通过jVisualVM观察到的参数相匹配

    RuntimeMXBean RuntimemxBean = ManagementFactory.getRuntimeMXBean();
    List<String> arguments = RuntimemxBean.getInputArguments();     
    
    RuntimeMXBean RuntimeMXBean=ManagementFactory.getRuntimeMXBean();
    列表参数=RuntimemxBean.getInputArguments();
    
  • 使用JVM选项-XX:+PrintCommandLineFlags,这提供了详细信息,但仍然没有证据表明设置了-server选项


  • 打开JConsole->检查java.lang.Runtime->VmName属性。 它为我显示了JavaHotSpot(TM)客户端虚拟机。如果您正在运行服务器模式-请检查它为您显示的值


    如果需要使用程序进行检查,则需要查询管理工厂中的上述属性。

    您可以使用
    System.getProperty(“java.vm.name”)
    并解析字符串

    例如:

    public class Test {
      public static void main(String{[] args) {
        System.out.println(System.getProperty("java.vm.name"));
      }
    }
    
    此示例将导致:

    OpenJDK Client VM
    
    或者,如果您正在使用-server:

    OpenJDK Server VM
    

    通过运行java-version命令,您可以发现:

    下面是使用-server标志运行的JVM示例

    java版本“1.7.0_17”
    Java(TM)SE运行时环境(build 1.7.0_17-b02)
    Java HotSpot(TM)64位服务器虚拟机(构建23.7-b01,混合模式)

    对于-client,它将显示64位客户端VM

    大多数情况下,它取决于CPU和物理内存的数量。更多@

    可能重复:它列在VisualVm中。我认为你必须看起来更好。如果找不到,可能没有设置。在我的常规windows工作站上,默认值为“java.vm.name=java HotSpot(TM)Client vm”,并且我无法设置服务器选项,因为没有安装服务器jvm。在Windows2008服务器上,默认值是“JavaHotSpot(TM)64位服务器VM”,这是我所期望的。但是,当我强制jvm使用'-client'时,运行时java.vm.name仍然是'java HotSpot(TM)64位服务器vm'。为什么会这样?服务器安装没有安装客户端JVM?