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