Java jstack命令中的框架是什么

Java jstack命令中的框架是什么,java,c++,jstack,Java,C++,Jstack,我试图通过查看java命令jstack来理解它,它说: jstack打印给定Java的Java线程的Java堆栈跟踪 进程或核心文件或远程调试服务器。对于每个Java帧, 完整的类名、方法名、“bci”(字节码索引)和行 如果可用,则打印编号。使用-m选项,jstack打印 所有线程的Java和本机框架以及“pc” (程序计数器)。对于每个本机帧,最接近的本机符号 打印“pc”(如果可用)。C++的名字并不是散乱的。 若要删除C++名称,则可以将此命令的输出传递到 c++过滤器 我有一些疑问,请

我试图通过查看java命令
jstack
来理解它,它说:

jstack打印给定Java的Java线程的Java堆栈跟踪 进程或核心文件或远程调试服务器。对于每个Java帧, 完整的类名、方法名、“bci”(字节码索引)和行 如果可用,则打印编号。使用-m选项,jstack打印 所有线程的Java和本机框架以及“pc” (程序计数器)。对于每个本机帧,最接近的本机符号 打印“pc”(如果可用)。C++的名字并不是散乱的。 若要删除C++名称,则可以将此命令的输出传递到 c++过滤器

我有一些疑问,请帮助我理解这个命令

1) Is core file只是我要打印堆栈跟踪的文件名,还是 不同?这里什么是远程调试服务器?我们如何使用或配置它

2) 在此上下文中,什么是Java框架,什么是线程的本机框架

3) 我之前在学习微处理器的时候了解了程序计数器,但Java的应用程序也是同样的概念吗

4) 最接近pc的本机符号是什么意思?另外,C++是如何在java中使用的,我在学习java时从来没有遇到过C++。 请澄清,提前谢谢

  • 核心文件是正在运行(或以前正在运行)的Java程序的核心转储,通常是在它崩溃或被您杀死之后
    jstack
    可以附加到实时运行的程序,也可以从核心转储读取

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

  • Java虚拟机也是一台机器,它有一个程序计数器。它不是一个你可以用手触摸或洒咖啡的东西

  • 因为JVM是虚拟的,所以它实际上是由真正的机器代码执行的,这被称为“本机”。因此,对于本机代码,您同样需要考虑框架、函数调用和执行点


  • “框架”是“堆栈框架”,是分配来表示调用方法的实例的存储。它包含参数、方法的局部变量、返回地址等。“本机框架”显然是为本机方法分配的堆栈框架(相对于Java方法)。非常感谢您的澄清。这意味着文档中说C/C++是本机代码?你能告诉我native是什么意思吗?为什么Java需要它?它可能是一个简单的问题,但请帮助我理解。是的,“本地代码”通常是用C或C++编写的,JVM本身是本地代码(并且您还可以通过JNI执行用户提供的本地代码)。它是必需的,因为JVM只是一个虚拟机,所以它需要在某处实现!