スタックメモリにはプリミティブ型とオブジェクトのアドレスが格納され、オブジェクトの値はヒープメモリに格納されることを知っています。
しかし、プリミティブがオブジェクトの一部である場合、ヒープまたはスタックのどこに格納されますか?
どうすれば確認できますか?
ありがとう。
スタックメモリにはプリミティブ型とオブジェクトのアドレスが格納され、オブジェクトの値はヒープメモリに格納されることを知っています。
しかし、プリミティブがオブジェクトの一部である場合、ヒープまたはスタックのどこに格納されますか?
どうすれば確認できますか?
ありがとう。
スタックは、クラスではなくメソッド (またはブロック内) のスコープ内にあるローカル プリミティブとオブジェクトへの参照にのみ使用されます。ヒープは、プリミティブ フィールドを含むすべてのオブジェクト データに使用されます。
JVM 内のデータがスタックに割り当てられているかヒープに割り当てられているかを知ることはできないと思います。たとえば、ホットスポットについては、http: //docs.oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html#escapeAnalysisを参照してください。
Hotspot では、Escape Analysis をオフにすることができます。その場合、常にヒープに割り当てられると思いますが、保証はしたくありません (JVM の内部動作に依存します)。
ヒープに何かが割り当てられているかどうかを判断するには、jmap を使用してヒープ ダンプを取得し、jhat (または別の同様のツール) を使用して分析します。その後、ヒープの内容を検査できるはずです。