【发布时间】:2021-07-21 10:12:21
【问题描述】:
我试图在递归程序执行期间显示消耗的堆栈空间,例如按顺序遍历树。有没有办法在 Java 中打印可用的堆栈空间,我知道可以使用 Runtime.getRuntime().freeMemory() 显示可用的堆内存。
【问题讨论】:
-
你说的显示是什么意思?你想当时抓住线程/堆吗?你想以编程方式(从运行应用程序)还是从应用程序外部手动/编写脚本?请提供更多详细信息。
标签: java
我试图在递归程序执行期间显示消耗的堆栈空间,例如按顺序遍历树。有没有办法在 Java 中打印可用的堆栈空间,我知道可以使用 Runtime.getRuntime().freeMemory() 显示可用的堆内存。
【问题讨论】:
标签: java
由于各种原因,Java 不允许您访问此类信息:
您可以获得的最接近是获取当前堆栈跟踪(例如使用Thread.getStackTrace())并检查返回的数组大小以了解有多少堆栈帧正在使用中(即堆栈的深度)。
但即使是这样的操作也可能有点昂贵。
【讨论】:
StackWalker API 可以用来降低一点成本(至少可以避免实现数组)。