我知道堆栈内存存储原始类型,对象的地址和对象值存储在堆内存中。
但是如果原语是对象的一部分,那么它将存储在堆或堆栈中的什么位置?
我怎样才能验证它?
谢谢。
我知道堆栈内存存储原始类型,对象的地址和对象值存储在堆内存中。
但是如果原语是对象的一部分,那么它将存储在堆或堆栈中的什么位置?
我怎样才能验证它?
谢谢。
堆栈仅用于局部原语和对在方法(或块内)范围内而不是类范围内的对象的引用。堆用于所有对象数据,包括其原始字段。
我认为不可能知道JVM中的任何数据是分配在堆栈还是堆上。例如,对于热点,请参阅:http ://docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html#escapeAnalysis
在 Hotspot 中,您可以关闭 Escape Analysis,在这种情况下,我认为它将始终在堆上分配,但我不想保证它(这取决于 JVM 的内部工作原理)。
至于确定是否在堆上分配了某些东西,您可以使用 jmap 进行堆转储,并使用 jhat(或其他类似工具)对其进行分析。然后你应该能够检查堆的内容。