2

需要创建我们自己的Java profiler。CPU 分析部分是在 IBM 的 Build your own profiler 文章的帮助下完成的。现在也在检查类似的内存分析。在搜索中找到了 Hprof,但它对我没有用。我想要的是获取类中每个方法消耗的内存(以字节为单位)

例如:

考虑一个类test1,类test2等在java文件中

method1()存在于 test1 中

method2()存在于 test2 中

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

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

测试 2/方法 2 = 18 字节

请帮忙

4

1 回答 1

1

如果您对给定方法在堆栈上占用多少内存感兴趣,那么类文件中有两个属性可以提供相关信息:

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

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

将这两个相加将使您粗略估计调用此方法时堆栈将增长多少。除了这些值之外,还会有额外的(可能是恒定的)开销,但这些应该是主要的可变因素。

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

于 2012-05-29T07:25:26.220 回答