读书人

java栈追踪元素(StackTraceElement)

发布时间: 2012-09-02 21:00:34 作者: rapoo

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()都还在被调用中)。就这样嗯。

读书人网 >编程

热点推荐