4

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

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

当他们说对象内存时,他们是指堆栈内存,还是他们的意思?(很困惑,因为如果我没记错的话,对象是在 Java 的堆中分配的)

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

总而言之,我如何衡量论文所描述的内容:

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

谢谢!

4

2 回答 2

1

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

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

要获得,您使用的总内存 -

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

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

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

参考:

内存MXBean

控制台

于 2013-08-19T22:19:47.207 回答
0

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

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

http://visualvm.java.net/

于 2013-08-19T22:23:50.647 回答