private native Throwable fillInStackTrace(int dummy);
使用调用此方法 dummy=0
创建异常时。这是什么意思 dummy
? 构造堆栈跟踪的深度是多少?
更新:
public class MyEx extends RuntimeException{
@Override
public synchronized Throwable fillInStackTrace() {
Method method = null;
try {
Class<?>[] classArray = new Class<?>[1];
classArray[0] = int.class;
method =Throwable.class.getDeclaredMethod("fillInStackTrace", classArray);
method.setAccessible(true);
Object obg = method.invoke(this, 6);
StackTraceElement[] trace = ((MyEx) obg).getStackTrace();
System.out.println();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
return this;
}
}
看来,哑巴真的是哑巴,不管我投什么值,结果都是一样的。。。
我想将堆栈跟踪大小限制为3以消耗更少的内存,并且从执行的Angular 来看创建异常会更快。我有一个真正的用例,我需要很多异常,但是有浅层堆栈跟踪。
1条答案
按热度按时间x6h2sr281#
这没有任何意义。这是一个伪论点。
本机代码实现完全忽略参数。例如,在openjdk 11中,桥接方法实现如下:
如你所见
dummy
参数被忽略。如果您正在寻找限制stacktrace深度的方法,支持的方法是使用
-XX:MaxJavaStackTraceDepth=depth
选项。