【发布时间】:2014-11-24 19:22:11
【问题描述】:
我们最近应用了几乎所有应用程序模块/组件(大约 50 个项目)都使用的缓存解决方案。为了更好地了解在不同系统“位置”上执行了哪些缓存操作,我们为当前执行的缓存操作添加了日志记录,包括堆栈跟踪,以准确了解触发缓存操作的原因。
我们当前的方法如下所示:我们从 new Throwable() 获取堆栈跟踪,过滤不相关的行并记录剩余的堆栈跟踪。但是,遗憾地创建一个新的异常来记录并不是一个便宜的操作。由于我们不直接使用缓存,而是通过休眠,所以在没有访问堆栈跟踪的情况下找出哪个调用者触发了操作并不容易。
因此,我的问题是:是否有比 Throwable().getStackTrace 或 Thread.currentThread().getStackTrace() 更高效的解决方案来访问当前的堆栈跟踪?
【问题讨论】:
-
“虽然遗憾地创建一个新的异常记录并不是一个便宜的操作”——实际上我想不出任何其他操作可能比这更昂贵。你不能从它的源代码中检测休眠吗?
-
是的,我想我们可以。我们也讨论过这个问题,但我们想先用这个简单的解决方案进行尝试。
标签: java performance stack-trace