需要创建我们自己的Java分析器。 CPU概要分析部分是在IBM构建您自己的探查器文章的帮助下完成的。现在检查类似的内存分析类型。在搜索中找到了Hprof,但它对我没用。我想要的是获取类中每个方法消耗的内存(
)例如:
考虑在java文件
中有一个类test1
,类test2
等
test1中存在 method1()
method2()
将在每个方法中声明许多变量 所以我想要的就像
test1 / method1 = 12个字节(如果可能的话显示跟踪,即它是如何产生如此多的字符+整数数等)
test2 / method2 = 18bytes
请帮忙
答案 0 :(得分:1)
如果您对给定方法在堆栈上花费了多少内存感兴趣,那么有two attributes in the class files提供有关此内容的信息:
max_locals
告诉你为局部变量保留了多少空间(以32位为增量,即乘以4得到字节)。
max_stack
告诉您在执行此方法期间操作数堆栈可以增长到最大值。
如果调用此方法,添加这两个将为您提供关于堆栈增长量的粗略估计。除了这些值之外,还会有额外的(可能是恒定的)开销,但那些应该是主要的可变因素。
您可以使用字节代码操作库(例如BCEL)来读取.class文件并提取这些属性。