首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

java栈追踪元素(StackTraceElement)

2012-09-02 
java栈跟踪元素(StackTraceElement)package com.masf.clazzpublic class M1 {public void aa(){StackTrac

java栈跟踪元素(StackTraceElement)
package com.masf.clazz;
public class M1 {
public void aa(){
StackTraceElement[] traces = Thread.getAllStackTraces().get(Thread.currentThread());
for(StackTraceElement element : traces){
System.out.println(element.getClassName()+"  "+element.getMethodName());
}
}

public static void main(String[] args){
new M1().aa();
StackTraceElement[] traces = new Throwable().getStackTrace();
for(StackTraceElement element : traces){
System.out.println(element.getClassName()+"  "+element.getMethodName());
}

}
}


请问为啥用StackTraceElement[] traces = Thread.getAllStackTraces().get(Thread.currentThread());
打出的堆栈信息会多出dumpThreads和getAllStackTraces方法,方法调用完后不是应该弹出栈吗?
1 楼 RednaxelaFX 2012-06-16   其实JavaDoc里没规定得特别死Thread.getStackTrace()和getAllStackTraces()要返回的数据里包含不包含“自己”咯。

对Oracle/Sun JDK来说,Thread.getAllStackTraces()会调用一个native的dumpThreads()方法,该方法是在VM内实现的,记录下所有Java线程的栈帧信息(而且不省略掉任何栈帧,意味着记录的时候getAllStackTraces()和dumpThreads()都还在被调用中)。就这样嗯。

热点排行