jstack命令中的帧是什么

时间:2014-02-22 12:32:10

标签: java c++ jstack

我试图通过online document for jstack来解释java命令jstack

  

jstack打印给定Java的Java线程的Java堆栈跟踪   进程或核心文件或远程调试服务器。对于每个Java框架,   完整的类名,方法名,'bci'(字节码索引)和行   数字(如果有)打印。使用-m选项,jstack打印   所有线程的Java和本机帧以及'pc'   (程序计数器)。对于每个本机帧,最接近的本机符号   打印出“pc”(如果有)。 C ++错位的名称不是demangled。   要解压缩C ++名称,可以将此命令的输出通过管道传递给   C ++ FILT。

我有些疑惑,请帮助我理解这个命令。

1)核心文件是我想要打印堆栈跟踪的文件的名称还是它 不同?什么是远程调试服务器,我们如何使用它或配置?

2)在此上下文中什么是Java Frame以及什么是线程的本机框架?

3)我在学习微处理器的过程中学到了很多关于程序计数器的知识,但是同样也是Java的概念应用程序?

4)最近的本机符号到pc是什么意思?另外在Java中如何使用c ++,在学习Java时我从未遇到过c ++。

请澄清,提前致谢。

1 个答案:

答案 0 :(得分:2)

  1. 核心文件是正在运行(或以前运行的)Java程序的核心转储,通常是在崩溃或者您将其杀死之后。 jstack可以附加到正在运行的程序,也可以从核心转储中读取。

  2. 帧是与函数调用关联的状态。每次调用函数时,都会有一个包含该函数本地状态的新框架(例如局部变量)。帧形成一个堆栈:调用一个函数将一个新帧推入堆栈,然后从一个函数返回,将该帧从堆栈中弹出,然后继续在下面的帧中,该帧属于调用者。顶部框架保存程序的当前执行点可直接访问的数据。从概念上讲,框架类似于块结构编程语言中的“范围”。

  3. Java虚拟机也是一台机器,它有一个程序计数器。这不是你可以用手触摸或将咖啡洒在上面的。

  4. 由于JVM是虚拟的,它实际上是由真实的机器代码执行的,称为“本机”。因此,您对本机代码的帧和函数调用以及执行点也有相同的全部考虑。