2012-07-30 3 views
5

新しく作成されたオブジェクトは、新しい世代に割り当てられます。新しく作成されたオブジェクトは、古い世代またはテニュアされた世代に直接割り当てられる可能性はありますか?あれがあれば、どの基地にいるの?古い世代でオブジェクトを作成できますか?

+0

ガベージコレクタの動作について心配する必要はありません。 – Wug

答えて

8

を参照してください "Frequently Asked Questions about Garbage Collection in the HotspotTM JavaTM Virtual Machine":

は、これまでの古い世代に直接割り当てられますオブジェクトですか?

1.4.1では、割り当てが直接古い世代の に発生する2つの状況があります。

若い世代で割り当てが失敗し、オブジェクトがオブジェクトへの参照を含まない 大きな配列である場合、古い世代に直接割り当てられるのは です。いくつかの選択されたインスタンスでは、 この戦略は、古い世代から割り当てて若い世代のコレクションを回避することを目的としていました。

フラグがあります(1.4.2以降で使用可能) l-XX:PretenureSizeThreshold =これは、若い世代の割り当てのサイズを に制限するように設定できます。若い世代ではこれより大きな割り当て は試行されず、古い世代から割り当てられるのは になります。

1)のしきい値サイズは64kワードです。 のPretenureSizeThresholdのデフォルトサイズは0で、若い世代ではどのサイズでも を割り当てることができます。

1.4.2の場合1) インクリメンタルコレクタ(-Xincgc)では64kワードのしきい値が引き続きtrueです。既定のコレクタと 同時コレクタ(-XX:+ UseConcMarkSweepGC)の場合、しきい値の値は に変更されているため、割り当てのサイズが若い世代の より大きい場合にのみ、旧世代の に割り当てようとします(空の場合は空き容量)。 のデフォルトの コレクタとコンカレントコレクタの1.4.1戦略が完全なコレクション のみにつながっている(若い世代のコレクションが行われていない)場合があることが確認されました。 はしきい値を上げるには十分に悪いとみなしました。

+0

がそれを手に入れました。ありがとう。 :) –

+1

これは絶対に正しくない、ここでチェックアウト:http://stackoverflow.com/questions/24618467/size-of-huge-objects-directly-allocated-to-old-generation/24618819?noredirect=1#comment38154886_24618819 –

関連する問題