如何在java中查找函数使用的内存

时间:2012-04-17 06:34:41

标签: java

我从我的代码中调用一个函数(用java编写),我想知道函数正在使用多少内存,并且请记住我不能向函数添加任何代码(我正在调用它)。

例如 -

 //my code starts
   .
   .
   .
   .
   myfunc();
 //print memory used by myfunc() here
  .
  .
 // my code ends

怎么做?

3 个答案:

答案 0 :(得分:7)

你要做的事情基本没有意义。没有函数使用的内存。你在比较“之前”和“之后”函数调用的总内存使用量的想法没有任何意义:函数可能会改变全局状态(这可能会减少或增加总内存使用量,在某些情况下(例如缓存填充)你可能不希望将增加量视为“函数使用的内存”,或者当您在myfunc内时垃圾收集器可能会运行并减少总使用内存。

这个好问题通常包含很大一部分答案。你应该做的是正确地提出这个问题。

答案 1 :(得分:1)

我成功使用了这段代码(不保证能够正常使用,但尝试一下,并且很有可能它会为您提供所需的代码):

final Runtime rt = Runtime.getRuntime();
for (int i = 0; i < 3; i++) rt.gc();
final long startSize = rt.totalMemory()-rt.freeMemory();
myFunc();
for (int i = 0; i < 3; i++) rt.gc();
System.out.println("Used memory increased by " +
   rt.totalMemory()-rt.freeMemory()-startSize);

答案 2 :(得分:0)

  

但它错了,因为理想情况下,在减法后它应该总是为零。

实际上它是正确的,因为通常每个线程都有一个TLAB(线程本地分配缓冲区),这意味着它在块中分配(因此每个线程可以同时分配)

使用-XX:-UseTLAB将其关闭,您将看到分配的字节。

您应该多次运行,因为使用此功能时可能正在运行其他内容。