6

新しく作成されたオブジェクトは、新しい世代に割り当てられます。新しく作成されたオブジェクトが古い世代または旧世代に直接割り当てられる可能性はありますか? もしそうなら、どのベースに基づいていますか?

4

1 に答える 1

8

「 HotspotTMJavaTM仮想マシンでのガベージコレクションに関するよくある質問」を参照してください。

オブジェクトが古い世代に直接割り当てられることはありますか?

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

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

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

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

1.4.2ケース1)では、64kワードのしきい値はインクリメンタルコレクター(-Xincgc)に対して引き続き当てはまります。デフォルトのコレクターと並行コレクター(-XX:+ UseConcMarkSweepGC)の場合、しきい値が変更され、割り当てのサイズが若い世代全体(次の場合に使用可能なスペース)よりも大きい場合にのみ、古い世代に割り当てようとします。それは空です)。デフォルトのコレクターと同時コレクターの1.4.1戦略が、完全なコレクションのみにつながる場合があることが観察されました(若い世代のコレクションは行われていませんでした)。しきい値を上げるのに十分悪いと判断しました。

于 2012-07-30T17:18:47.130 に答える