Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.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
System.out中的Java执行详细信息_Java_Command Line_Jvm Hotspot - Fatal编程技术网

System.out中的Java执行详细信息

System.out中的Java执行详细信息,java,command-line,jvm-hotspot,Java,Command Line,Jvm Hotspot,我记得Java中有一个神奇的命令行选项,它打开了对当前执行到控制台的操作的写入。输出看起来像字节码 -verbose不匹配,因为它只打印类加载,而此选项输出内存分配、设置局部变量等信息。它非常详细,如“Hello world”的10行 我没有在这里或这里找到它。 我也发现了一些,但大多数只在openjdk或开发模式下工作。也许有一种方法可以在这种开发模式下在Windows上启动java.exe? 或者,这些列表可能遗漏了另一组标志?不是您所要求的,但我非常喜欢java进程id上的“kill-3”

我记得Java中有一个神奇的命令行选项,它打开了对当前执行到控制台的操作的写入。输出看起来像字节码

-verbose
不匹配,因为它只打印类加载,而此选项输出内存分配、设置局部变量等信息。它非常详细,如“Hello world”的10行

我没有在这里或这里找到它。 我也发现了一些,但大多数只在openjdk或开发模式下工作。也许有一种方法可以在这种开发模式下在Windows上启动java.exe?
或者,这些列表可能遗漏了另一组标志?

不是您所要求的,但我非常喜欢java进程id上的“kill-3”——它会转储关于每个线程的各种信息,以及它们所处的状态、持有的锁和等待的锁,在windows上使用Ctrl-Break创建线程转储。 要监视类加载,请使用
-verbose:class
进行垃圾收集
-verbose:gc
支持的选项。我能找到的最接近您描述的是-verbose:gc,或者可能是-verbose:class

将输出字节码,但它是一个静态反汇编程序,与运行时无关。

我最近使用了很多;也许那会给你你想要的?它可以分析内存和CPU使用情况,可以转储线程堆栈,甚至可以说服JVM列出正在进行的类加载器活动(通过MBean支持:转到
java.lang
→<代码>类加载,选择
属性
并更新
详细
;它仍然会转储到
系统。当然了
)。最棒的是,你不需要做任何事情来启用它(通常);您可以只附加到已经运行的JVM。(如果您使用的是Java1.5,请改用
jconsole


但是请注意,您不太可能得到执行字节码的转储。这是因为HotSpot JIT引擎已经存在了好几年了,它在执行之前将字节码转换为本机指令,所以当代码实际执行时,已经没有字节码可供检测报告了。从理论上讲,您可能能够构建一个以旧方式工作的特殊VM,但是它的速度非常慢(就像过去糟糕的日子一样),所以为什么您真的要这么做呢?

jstack
也非常整洁。有一些工具可以解析这些转储并更好地显示它们,例如线程转储查看器:+1,注意“kill-3”是一个用词不当的命令(“kill”命令实际上用词不当),因为它在整个过程中都不会杀死。我之所以提到这一点,是因为我读过(也听到过)这个问题好几次:“它会扼杀这个过程吗?”。不,它不会,它只是发送一个信号,结果,在控制台上从JVM输出许多信息:)@NoozNooz42:将此与比较。在某些系统上,它实际上会杀死所有进程,而在另一些系统上,它会杀死具有指定名称的所有进程@Nooznooz42:我的*nix版本将有一个
tickle
命令。我需要运行时输出,如调试模式下的logger,但在底层,jvisualvm的优点是它可以连接到运行中的JVM并在内部进行浏览。(使用MBeans插件)可以做的一件事是进入是否记录加载类(
java.lang)的控件内部→类加载→Verbose
)并通过编辑标志将其打开。这有多美?您不需要在启动JVM时记住设置标志。我的答案在上面编辑。