オブジェクトの有効期間が特定のスコープに制限されていることがランタイムに明らかな場合、JVMおよび.NET VMはスタックにオブジェクトを割り当てますか?
1 に答える
5
JVMはこれを行います。適切な状況下では、実際に割り当てを完全に削除できます。
この記事を引用します。
Java言語は、スタックにオブジェクトを明示的に割り当てる方法を提供していませんが、この事実は、JVMが適切な場所でスタック割り当てを使用することを妨げるものではありません。JVMは、エスケープ分析と呼ばれる手法を使用できます。これにより、特定のオブジェクトがその存続期間全体にわたって単一のスレッドに制限されたままであり、その存続期間は特定のスタックフレームの存続期間によって制限されます。このようなオブジェクトは、ヒープではなくスタックに安全に割り当てることができます。さらに良いことに、小さなオブジェクトの場合、JVMは割り当てを完全に最適化し、オブジェクトのフィールドをレジスターに単純に持ち上げることができます。
ウィキペディアからのエスケープ分析の詳細。
于 2009-11-24T16:54:09.660 に答える