我正在研究监视应用程序内存使用情况的JVMTI代理。我已设法使用字节码检测来监视堆上的内存分配,以便在分配新对象/数组时调用本机方法。 但我真的很困惑如何确定堆栈上分配的内存量。 如果您能提供任何想法,提示或链接,我将非常感激。
答案 0 :(得分:2)
您希望从JVMTI界面获得多少细节?它看起来只报告logical Java stack frame information,这意味着您无法找到正在使用的实际运行时堆栈空间,但您可以使用jmethodID
找出the layout of a Java Stack Frame来制作合理猜测(编译时特定方法的局部变量数是固定的,参见GetLocalVariableTable)。本机方法的堆栈帧将不可见。存储在堆栈上的其他JVM状态(例如,JIT和线程基础结构使用的调试信息或空间)也将不可见。