gpt4 book ai didi

java - 为什么使用 "new Throwable().getStackTrace()[1].getMethodName()"获取结果被称为昂贵?

转载 作者:行者123 更新时间:2023-11-30 01:41:51 24 4
gpt4 key购买 nike

我正在使用

new Throwable().getStackTrace()[1].getMethodName()

一些开发人员认为它价格昂贵。这种方法的成本在哪里?我们应该使用它吗?如果是,那么应该注意什么?

在我的用例中,非常需要找到调用方法名称。

大约有 50 个作业,因此这将在 Java8 中的独立程序中在 32 GB ram centos 上执行大约 100 次。

最佳答案

可以获取方法名statically ,无需创建额外的 Throwable 对象

Thread.currentThread().getStackTrace()[1].getMethodName()

感谢@RiteshPuj

通知getStackTrace internally仍然创建对象(ExceptionThread[])

   StackTraceElement[][] stackTraceArray = dumpThreads(new Thread[] {this});
...
} else {
// Don't need JVM help for current thread
return (new Exception()).getStackTrace();

对于 Java 9+,请使用 StackWalker (感谢 @StuartMarks)

public void methodB(){
System.out.println("I am methodB");
StackWalker.getInstance()
.walk(frames -> frames.skip(1).findFirst())
.ifPresent(frame -> {
System.out.println("I was called by a method named: " + frame.getMethodName());
});
}

关于java - 为什么使用 "new Throwable().getStackTrace()[1].getMethodName()"获取结果被称为昂贵?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59665820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com