如果原始数据是存储在java内存中的对象的一部分?

时间:2013-09-05 21:43:46

标签: java java-memory-model

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

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

我该如何验证?

感谢。

2 个答案:

答案 0 :(得分:0)

堆栈仅用于本地基元,引用用于方法(或块内)而不是类的对象。堆用于所有对象数据,包括其原始字段。

答案 1 :(得分:0)

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

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

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