How Expensive is Thread.getStackTrace()?

后端 未结 4 1857
悲哀的现实
悲哀的现实 2020-12-05 05:34

In a logging system, every log output is done by a helper class with a method such as this one

public void debug(String message) {
    Logger logger = Logge         


        
4条回答
  •  心在旅途
    2020-12-05 05:54

    Now with JDK 9 & 10, you can use StackWalker, which is not an expensive call.

    private void invoke006() {
            var stack = StackWalker.getInstance(StackWalker.Option.SHOW_HIDDEN_FRAMES).walk((s) -> s.collect(Collectors.toList()));
            stack.forEach(stackFrame -> {
                if (stackFrame.getMethodName().equals("masterInvoker")) {
                    System.err.println("master called !!");
                    System.err.println(StackWalker.getInstance().walk((s) -> s.collect(Collectors.toList())).get(0).getMethodName() + ", line: " + StackWalker.getInstance().walk((s) -> s.collect(Collectors.toList())).get(0).getLineNumber());
                }
            });
        }
    

提交回复
热议问题