Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否可以获取用于在java中启动jvm的命令?_Java_Jvm - Fatal编程技术网

是否可以获取用于在java中启动jvm的命令?

是否可以获取用于在java中启动jvm的命令?,java,jvm,Java,Jvm,我想知道是否有可能从代码中获得用于启动java程序的命令 例如,如果我启动java程序时使用: java -cp lib1:lib2:... -jar mylib.jar com.foo.Bar 我想得到确切的字符串(包括jvm参数) 可能吗 对悬赏和问题发表评论 谢谢大家的回复。不幸的是,我没有得到我最初想要的答案。我希望有一些可移植的解决方案,可以从程序本身(包括类路径等)中获得完整的java命令。似乎没有可移植的解决方案,因为我使用Linux,所以我使用agodinhost和Luig

我想知道是否有可能从代码中获得用于启动java程序的命令

例如,如果我启动java程序时使用:

 java -cp lib1:lib2:... -jar mylib.jar com.foo.Bar
我想得到确切的字符串(包括jvm参数)

可能吗


对悬赏和问题发表评论

谢谢大家的回复。不幸的是,我没有得到我最初想要的答案。我希望有一些可移植的解决方案,可以从程序本身(包括类路径等)中获得完整的java命令。似乎没有可移植的解决方案,因为我使用Linux,所以我使用agodinhost和Luigi R.Viggiano的响应来解决我的问题。然而,我把赏金给了拉胡洛克,以获得最完整(便携)的回应。对于其余的部分,可以使用向上投票:)

检索VM参数:

public static void main(String args[]) {
    List<String> inputArguments = ManagementFactory.getRuntimeMXBean().getInputArguments();
    System.out.println("input arguments = " + inputArguments);
}
publicstaticvoidmain(字符串参数[]){
List inputArguments=ManagementFactory.getRuntimeMXBean().getInputArguments();
System.out.println(“输入参数=“+inputArguments”);
}
但是,它不会提供所有命令行(只提供JVM参数,没有主类或参数)。样本输出:

输入参数=[-Dfile.encoding=UTF-8,-XX:-UseTLAB,-Xms2000m,-Xmx2000m,-XX:+PrintCompilation,-XX:+PrintGC]

它只在SunOracleJVM上工作:
System.getProperty(“sun.java.command”)


此外,您还可以查看,它可以报告活动进程的命令行。要检查哪一个是当前JVM进程,请在此处检查:

在linux机器中更容易运行:

ps -ef | grep java
此命令将列出使用其所用参数运行的所有java程序


不确定windows环境中可以使用什么。

下面提到的代码应该显示所有JVM参数、传递给main方法的参数以及主类名

import java.lang.management.ManagementFactory;
import java.lang.management.RuntimeMXBean;

import java.util.List;

public static void main(String[] args) {
  RuntimeMXBean bean = ManagementFactory.getRuntimeMXBean();
  List<String> jvmArgs = bean.getInputArguments();

  for (int i = 0; i < jvmArgs.size(); i++) {
    System.out.println( jvmArgs.get( i ) );
  }
  System.out.println(" -classpath " + System.getProperty("java.class.path"));
  // print the non-JVM command line arguments
  // print name of the main class with its arguments, like org.ClassName param1 param2
  System.out.println(" " + System.getProperty("sun.java.command"));
}
导入java.lang.management.ManagementFactory;
导入java.lang.management.RuntimeMXBean;
导入java.util.List;
公共静态void main(字符串[]args){
RuntimeMXBean=ManagementFactory.getRuntimeMXBean();
列出jvmArgs=bean.getInputArguments();
对于(int i=0;i
javadoc for

返回传递给Java虚拟机的输入参数,该虚拟机 不包括main方法的参数。此方法返回 如果Java虚拟机没有输入参数,则为空列表 机器

某些Java虚拟机实现可能采用输入参数 来自多个不同的来源:例如,从 启动Java虚拟机的应用程序,如 “java”命令、环境变量、配置文件等

通常,并非“java”命令的所有命令行选项都是 传递给Java虚拟机。因此,返回的输入参数 可能不包括所有命令行选项

您还可以查看:

它是一个Java程序,能够为所有用户获取完整的命令行 Java进程,包括主类和JVM的完整类名 选项

您可以找到各种类型的摘要,包括 链接至:

  • -返回Java虚拟机运行时系统的托管bean
  • javadoc

  • 确定JVM是否正在运行

在Win2003上的任务管理器中,可以像在linux上一样启用显示命令的列的显示。或者,您可以从命令行执行此操作,如下所示:

wmic.exe PROCESS where "name like '%java%'" get Processid,Caption,Commandline

@它将通过java执行OS命令。他希望在命令提示符中使用该命令。已删除该注释。谢谢您是否希望从正在运行的程序中获取命令?抱歉,不起作用;默丁下来。对(缺少)格式表示歉意:
$java-showversion-classpath toys/-Xms16M-Xmx20M Env|grep命令java版本“1.7.0_09”java(TM)SE运行时环境(构建1.7.0_09-b05)java热点(TM)64位服务器虚拟机(构建23.5-b02,混合模式)
sun.java.command=Env-Env是一个简单的java程序,用于将系统属性转储到标准输出。这可能与Windows上的“确定JVM是否在调试模式下运行”相同。链接已失效,但文章中的相关代码是
List-inputArgs=ManagementFactory.getRuntimeMXBean().getInputArguments();如果(!inputArgs.contains(“-Xdebug”))
,那么它与Java 5无关。