堆内存与对象内存

时间:2013-08-19 22:07:38

标签: java profiling profiler

根据一篇关于Java内存和特性的论文:

  

“... 内存分数分为两种类型:堆内存,即应用程序在运行时消耗的内存,以及对象内存,即由程序中使用的各种对象分配的内存,如作为整数和字符串等 ......“

当他们说对象内存时,他们是指堆栈内存,还是他们的意思? (因此,如果我没有错,则在Java中的堆中分配对象)

第二个问题,如果我只是想在完整程序执行期间测量堆和堆栈的总大小,我应该使用什么工具?我一直在环顾四周,尝试了 NetBeans 7.3.1 中的内置Java Profiler以及 YourKit 12.0.6 ,在那里我可以检查堆,但是它来研究放置在堆栈上的“对象”和变量,我找不到办法!

总结一下,我该如何衡量论文的描述:

  • 使用的总堆内存
  • 使用的总对象内存

谢谢!

2 个答案:

答案 0 :(得分:1)

堆内存:Java对象的存储空间。假设您使用new关键字创建类的实例。

堆栈内存:用于存储局部变量,方法调用等.JVM还可以决定并使用它来存储某些对象以提高性能。

获取你使用的总内存 -

usedMemory = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();

您无法在运行时获取堆栈内存,但您可以启动具有预定义堆栈大小的应用程序,具体取决于您的平台。

有一个非堆内存,我认为它们定义为对象内存,用于存储加载的类......元数据等。

<强>参考文献:

MemoryMXBean

JConsole

答案 1 :(得分:0)

我认为它们意味着为加载类和静态数据而保留的内存区域。我一直把它称为非堆内存。我使用VisualVM来测量内存使用情况。精确测量内存是一项挑战,因为在运行垃圾收集器,加载和卸载类等时,使用率会不断波动。

随着时间的推移,内存使用情况的图表通常对于理解和查找内存问题/使用情况更有用。

http://visualvm.java.net/