代码之家  ›  专栏  ›  技术社区  ›  Miserable Variable

如何判断VM是在服务器模式还是在客户端模式下运行?

  •  12
  • Miserable Variable  · 技术社区  · 15 年前

    Java热点vpm可以使用-client或-server参数运行。如果两者都没有指定,那么它会根据一些规则选择一个。

    当命令行中未指定模式时,是否可以判断正在运行的VM是以客户机模式运行还是以服务器模式运行?我需要在正在运行的进程之外的Windows框上安装此文件。

    我意识到这不是一个编程问题,但我希望它是好的,因为它与编程有关。提前谢谢。

    4 回复  |  直到 15 年前
        1
  •  5
  •   Mark    15 年前

    使用连接到正在运行的Java进程 jvisualvm . 这将让您看到已使用的JVM参数。

        2
  •  5
  •   VonC    15 年前

    String s = System.getProperty("java.vm.name");
    // s = Java HotSpot(TM) Server VM
    

    但这将是高度特定于供应商的。

    在命令行中,您可以使用 jinfo (过去 check a value of a given HotSpot VM option )

    C:\>"c:\Program Files\Java\jdk1.6.0_16\bin\jps.exe" -l -m
    21812 sun.tools.jps.Jps -l -m
    19244 (eclipse)
    
    C:\>"c:\Program Files\Java\jdk1.6.0_16\bin\jinfo.exe" -flag NewRatio 19244
    -XX:NewRatio=12
    

    自:

    • Hotpot option
    • 文档指定:新/旧代大小的比率。 [x86 -server: 8; x86 -client: 12]

    12表示“客户”。

        3
  •  2
  •   Massimiliano Fliri    15 年前

    您可以在连接到MBean服务器时检索此信息。如果您运行的是Sun VM,那么您有一个名为“java.lang:type=Runtime”的MBean,它公开了属性“VmName”,该属性的值与系统属性“java.VM.name”相同。例如,对于服务器vm,该值类似于“Java热点(TM)服务器vm”。来自其他供应商的VM可能使用类似的机制。

    您可以使用JDK中包含的工具(如jconsole或jvisualvm)连接到MBean服务器,也可以使用 JMX 如果您需要编程访问。

        4
  •  0
  •   Jean    15 年前

    如果jvm是用-debug启动的,那么可以使用jdb连接到它,并使用eval。。。

    eval System.getProperty("java.vm.name");
    

    jinfo