相关疑难解决方法(0)

java是否有任何机制让VM自己跟踪方法调用,而不使用javaagent等?

我想动态地构建调用图,从任意方法调用开始,或者从运行的JVM本身中使用新线程开始构建调用图.(这个软件将成为负载测试另一个消耗调用图的软件的测试工具)

我知道有一些SPI接口,但看起来你需要用它们运行-javaagent标志.我想直接在VM本身访问它.

理想情况下,我想获得每个方法调用的入口和出口的回调,该方法调用的参数以及该方法中的时间.显然在单个线程内.

我知道AOP可能会这样做,但我只是想知道JDK中是否有工具可以让我捕获它.

java instrumentation trace callstack

19
推荐指数
1
解决办法
6074
查看次数

在 Java 8 中获取调用者方法的有效方法?

这就是我想要实现的:如果有一个方法a()调用 method b(),我想知道谁调用了 method b()

public void a(){
  b();//but it is not necessarily in the same class
}

public void b(){
  String method = getCallerMethod();//returns 'a'
}
Run Code Online (Sandbox Code Playgroud)

现在,这可以在 Java 9+ 中使用 API 高效地实现StackWalker。在 Java 8 中,我可以使用Thread.currentThread().getStackTrace()or new Exception().getStackTrace(),但这两种方法都非常慢。我不需要整个堆栈跟踪,我只需要堆栈跟踪中的前一帧,并且只需要该帧中的方法名称(可能还有类名称)。

有没有办法在 Java 8 中有效地实现这一点?

java performance exception throwable stack-frame

2
推荐指数
1
解决办法
3504
查看次数