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

上面的代码是我使用的btrace示例。
运行我的函数两次,我得到了两个不同的结果:

如图所示,堆的成本是不同的:一种是另一种的两倍。
发布于 2012-08-14 15:30:22
您无法通过在调用某个方法之前和之后区分JVM堆的使用情况来判断该方法需要多少内存。当方法正在执行时,系统中发生了太多的事情,您所获得的数字表示由JVM从OS分配的内存-结果将不会告诉您任何事情。
如果您想要一些至少可以远程使用的东西,那么您应该在方法调用(Sys.Memory.dumpHeap(fileName))之前和之后获取一个堆转储,并使用堆遍历器来区分这两个。尽管如此,你仍然会得到相当多的噪音,但这比依赖操作系统分配的内存要好得多。
最精确的内存跟踪包括捕获在方法调用期间创建并直接连接到该调用的所有新实例的分配信息-例如。在被调用的方法中创建,在所有从被跟踪的方法中递归调用的方法中创建,也在被跟踪的方法调用树中任何地方递归产生的所有可运行对象中创建。要做到这一点可能有点棘手,但这完全可以通过BTrace来实现。
https://stackoverflow.com/questions/11944730
复制相似问题