Memory Profiler

时间:2012-05-29 07:12:58

标签: java memory memory-management profiling profiler

需要创建我们自己的Java分析器。 CPU概要分析部分是在IBM构建您自己的探查器文章的帮助下完成的。现在检查类似的内存分析类型。在搜索中找到了Hprof,但它对我没用。我想要的是获取类中每个方法消耗的内存(

例如:

考虑在java文件

中有一个类test1,类test2等 test1中存在

method1()

test2中存在

method2()

将在每个方法中声明许多变量 所以我想要的就像

test1 / method1 = 12个字节(如果可能的话显示跟踪,即它是如何产生如此多的字符+整数数等)

test2 / method2 = 18bytes

请帮忙

1 个答案:

答案 0 :(得分:1)

如果您对给定方法在堆栈上花费了多少内存感兴趣,那么有two attributes in the class files提供有关此内容的信息:

max_locals告诉你为局部变量保留了多少空间(以32位为增量,即乘以4得到字节)。

max_stack告诉您在执行此方法期间操作数堆栈可以增长到最大值。

如果调用此方法,添加这两个将为您提供关于堆栈增长量的粗略估计。除了这些值之外,还会有额外的(可能是恒定的)开销,但那些应该是主要的可变因素。

您可以使用字节代码操作库(例如BCEL)来读取.class文件并提取这些属性。