7.12.16 -XX:[+|-]HitachiExplicitMemoryMoveToTenuredFirst
Explicitメモリーブロックの解放処理でのオブジェクトの移動先を、Tenured領域に変更します。
説明
Explicitメモリーブロックの解放処理でのオブジェクトの移動先を指定します。
- 前提オプション
-
-
-XX:HitachiUseExplicitMemory
-
書式
-XX:[+|-]HitachiExplicitMemoryMoveToTenuredFirst
指定できる値
型:String
- -XX:+HitachiExplicitMemoryMoveToTenuredFirst
-
Explicitメモリーブロックの解放処理でのオブジェクトの移動先が、Tenured領域になります。
- -XX:-HitachiExplicitMemoryMoveToTenuredFirst
-
Explicitメモリーブロックの解放処理でのオブジェクトの移動先が、New領域になります。
デフォルト値
- 定義項目の省略
-
-XX:+HitachiExplicitMemoryMoveToTenuredFirst
注意事項
このオプションが有効になっている場合、解放処理が実行されるときに被参照のオブジェクトは、Tenured領域へ移動します。
参照元のオブジェクトが一時的に短命なオブジェクトの場合、このオプションを無効とし、Explicitメモリーブロック内の被参照のオブジェクトをNew領域に移動することで、次回のCopyGCの際に参照元オブジェクトと同時に回収できます。そうすることによって、このオプションが無効となっている場合に、Tenured領域の利用済みサイズが上昇することを防げます。
ただし、次の点に注意が必要です。
-
CopyGC頻度の増加
Explicitメモリーブロック解放時に、被参照のオブジェクトをNew領域に移動するため、移動したオブジェクトがNew領域を消費します。その結果、次回のCopyGCまでの間隔が短くなり、スループットの低下や、オブジェクトの加齢速度が上昇するおそれがあります。
-
Tenured領域に移動するオブジェクトがNew領域と明示管理ヒープ領域間で循環
複数のExplicitメモリーブロック内のオブジェクトから参照されるオブジェクト(例えばアプリケーション共通のデータ定義)が存在する場合、そのオブジェクトは長寿命オブジェクトとなります。そのため、このオプションが有効な場合に、オブジェクトがExplicitメモリーブロックへ移動したあと、そのExplicitメモリーブロックの解放処理が実行される際にTenured領域へ移動し、オブジェクトの寿命(アプリケーションの終了時など)までTenured領域に存在し続けることになります。
一方、このオプションが有効な場合に、Explicitメモリーブロックの解放処理が実行される際にNew領域へ移動し、その後しきい値までのCopyGCが実行されると、別のExplicitメモリーブロックへ移動します。この繰り返しによって、オブジェクトがNew領域と明示管理ヒープ領域を循環し、CopyGCやExplicitメモリーブロックの解放処理のオーバーヘッドが増大するおそれがあります。