2016-04-01 9 views
-1

new演算子がオブジェクトのメモリをどのように割り当てるかJava?私たちが書くとどうなるか尋ねられました Test t = new Test()。 新しい演算子がヒープメモリ内でメモリを内部的に割り当てる方法を教えてください。いくつかのステップがあります。新しい演算子ヒープ内の内部メモリ割り当て

+3

http://stackoverflow.com/questions/13926518/what-does-the-new-keyword-do – imoteb

+0

私は理解していますが、適切なANを取得できませんでした。 – Aditya

+0

これはこの種の質問のサイトではありません。 – SubliemeSiem

答えて

0

実装はJVMに依存します。起こりうる結果はたくさんあります。

  • オブジェクトが不要な場合は、削除される可能性があります。つまり、何も起こりません。
  • オブジェクトがメソッドをエスケープしないことをEscape Analysisが検出した場合、そのオブジェクトをスタックに配置できます。この割り当てはフレームが開始され、必要なすべてのメモリが一度に予約されます(オブジェクト単位ではありません)
  • TLAB(スレッドローカル割り当てバッファ)が有効になっている場合(デフォルトで)、各スレッドはオブジェクトを割り当てる。これにより、同時メモリ割り当てが可能になります。ポインタにはバッファ内の次の空き領域があり、新しいオブジェクトが追加されると、ポインタを受け取り、オブジェクトのサイズを追加します。オブジェクトもゼロにします(オブジェクトヘッダーを設定します)。新しいバッファがエデン空間から割り当てられます(空のメモリチャンクを取得するG1を除く)
  • TLABを持たない場合、割り当ては直接eden空間から行われます。
+0

知識を共有していただきありがとうございます。 – Aditya

関連する問題