堆内存 vs 对象内存

4
根据一篇关于Java内存和特性的论文:
“...内存分数分为两种类型:堆内存,即应用程序在运行时消耗的内存,和对象内存,即程序中使用的各种对象分配的内存,例如整数和字符串等。...”
他们说“对象内存”时是否意味着“栈”内存,或者他们指的是什么?(因为如果我没有错的话,Java中的对象是在堆中分配的,所以感到困惑)
第二个问题,如果我只想测量完整程序执行期间堆和栈的总大小,我应该使用什么工具?我一直在寻找并尝试使用NetBeans 7.3.1中内置的Java Profiler和YourKit 12.0.6,其中我能够检查堆,但当涉及研究放置在栈上的“对象”和变量时,我找不到方法!
总之,我如何衡量论文所描述的内容:
- 使用的总堆内存 - 使用的总对象内存
谢谢!
2个回答

1

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

栈内存:用于存储本地变量、方法调用等。JVM也可以决定并使用它来存储某些对象以提高性能。

要获取所使用的总内存-

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

您无法在运行时获取堆栈内存,但是可以使用预定义的堆栈大小启动应用程序,具体取决于您的平台。
有一种非堆内存,我认为他们将其定义为对象内存,用于存储加载的类、元数据等。
参考资料: MemoryMXBean JConsole

0

我认为他们指的是为加载类和静态数据保留的内存区域。我一直将其称为非堆内存。我使用VisualVM来测量内存使用情况。精确测量内存使用情况是具有挑战性的,因为使用情况会随着垃圾收集器的运行、类的加载和卸载等而不断波动。

随时间变化的内存使用情况图表通常更有用于理解和查找内存问题/使用情况。

http://visualvm.java.net/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接