-2

我知道堆栈内存存储原始类型,对象的地址和对象值存储在堆内存中。

但是如果原语是对象的一部分,那么它将存储在堆或堆栈中的什么位置?

我怎样才能验证它?

谢谢。

4

2 回答 2

0

堆栈仅用于局部原语和对在方法(或块内)范围内而不是类范围内的对象的引用。堆用于所有对象数据,包括其原始字段。

于 2013-09-05T21:45:15.277 回答
0

我认为不可能知道JVM中的任何数据是分配在堆栈还是堆上。例如,对于热点,请参阅:http ://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html#escapeAnalysis

在 Hotspot 中,您可以关闭 Escape Analysis,在这种情况下,我认为它将始终在堆上分配,但我不想保证它(这取决于 JVM 的内部工作原理)。

至于确定是否在堆上分配了某些东西,您可以使用 jmap 进行堆转储,并使用 jhat(或其他类似工具)对其进行分析。然后你应该能够检查堆的内容。

于 2013-09-05T22:03:41.523 回答