2012-05-29 70 views
2

需要建立我们自己的Java剖析。 CPU分析部分是在IBM构建您自己的分析器文章的帮助下完成的。现在也检查类似的内存分析。在搜索发现Hprof,但它对我没有用。我要的是一类内存分析器

对于例如,通过各种方法获取以字节为单位消耗的内存:

考虑一类test1test2类等是否有在Java文件

method1()存在于test1的

method2()存在于test2的

许多变数将每个方法 所以我想我内部声明就像

TEST1 /方法1 = 12个字节(如果可能的话显示跟踪,即它是怎么来像焦炭+整数等数这么多的数量)

测试2 /方法2 = 18bytes

请帮助

+0

你纯粹谈论局部变量?或者关于在这些方法中创建的对象? –

+0

如果不询问JVM本身,则无法执行此操作。您无法在JDK或Attach API中使用jvisualvm的任何特定原因? –

+0

'需要建立我们自己的Java profiler'你能解释,为什么你觉得你需要做到这一点?这不是微不足道的,并且已经由商业分析师提供。 –

回答

1

如果你有兴趣在一个给定的方法有多少内存占用在栈上然后有two attributes in the class files,其中提供了这样的信息:

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

max_stack告诉你操作数栈可这种方法的执行过程中成长为最大。

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

你可以使用一个字节码操作库,如BCEL读.class文件,并提取这些属性。