btrace测试调用函数使用的内存

时间:2012-08-14 01:53:47

标签: java jvm btrace

使用btrace,我想测试我的函数使用了多少堆,所以我写道:

enter image description here

代码上方是我使用过的btrace样本。

两次操作我的功能我得到了两个不同的结果:

enter image description here

如图所示,堆积成本不同:一个是另一个的两倍。

1 个答案:

答案 0 :(得分:2)

通过在调用方法之前和之后区分JVM堆使用情况,您无法确定某个方法需要多少内存。当方法执行时,系统中会发生太多事情,而您获得的数字代表JVM从OS分配的内存 - 结果不会告诉您任何事情。

如果你想要一些至少可以远程使用的东西,你应该在方法调用之前和之后( Sys.Memory.dumpHeap(fileName))进行堆转储,并使用堆运行器来区分这两者。尽管如此,你会得到相当多的噪音,但它比依靠操作系统分配的内存要好得多。

最精确的内存跟踪包括捕获在方法调用期间创建并直接连接到该调用的所有新实例的分配信息 - 例如。在被调用的方法中创建的,在被跟踪的一个递归调用的所有方法中,以及在被跟踪的方法调用树中的任何地方递归地生成的所有可运行的文件中。完成这项工作可能有点棘手,但BTrace完全可以实现。