Hitachi

uCosminexus Application Runtime - Cosminexus Developer's Kit for Java 機能解説・リファレンス


4.15.3 圧縮オブジェクトポインタ機能の注意事項

  1. この機能を有効にすることによって,Javaアプリケーション実行時のJavaヒープ領域の使用量が減少し,その変化量はJavaアプリケーションに依存します。もし,この機能を有効にしたことによるメモリ使用量の変化を問題視する場合は,この機能をOFFにしてください。

  2. この機能を有効にすることによって,Javaアプリケーション実行時のスループットなどの実行性能に影響を与える場合があるのでご注意ください。この機能が実行性能に影響する点は,次の2点です。

    (a)JavaVMが扱うデータ(Javaオブジェクト)サイズが減少し,より効率的なメモリアクセスができる(性能向上要因)

    (b)JavaVMがJavaオブジェクトのサイズを圧縮するための計算が必要となる(性能低下要因)

    (a)(b)の2点の要因から,この機能有効時,JavaVM実行時の性能が変化することになります。また,(b)については,JavaVM起動時のOS環境の違いによって,計算方法(詳細は次の(補足))も変化し実行性能に影響します。もし,この機能を有効にしたことによる性能の変化を問題視する場合は,この機能をOFFにしてください。

    (補足)Javaオブジェクトのサイズの圧縮について

    圧縮オブジェクトポインタ機能有効時,JavaVMはJavaオブジェクトのサイズを圧縮して管理しますが,その圧縮方法(以降,モードと呼びます)は複数存在します。JavaVMは起動時に,その実行環境状況によってどのモードを選択するかを決定します。以降,JavaVMは起動時に選択したモードを適用して,Javaオブジェクトのサイズを圧縮します。

    どのモードを選択するかの条件は,次の2つとなります。

    1. Javaヒープ領域の指定値

    2. 1.のヒープ領域が仮想アドレス空間のどこに割り当てられるか

    そのため,JavaVM起動時のヒープ領域サイズの指定値を変更した場合,または,同一OS上で動作しているほかのプロセスやライブラリのロード状況によっては,JavaVM起動ごとに異なるモードが適用されます。

    どのモードが選択されるかは,実際にヒープ領域が仮想メモリ空間上のどこに割り当てられるかに依存するため,特定の圧縮モードが常に適用されるようにこの機能を有効とすることは困難です。この機能を無効・有効とした場合だけ性能の差異が発生するだけでなく,この機能を有効とした場合も,JavaVMの起動ごとに性能の差異が発生する場合もあることにご注意ください。

    参考として圧縮オブジェクトポインタ機能有効時にJavaVMが選択できる各モードについて,選択条件と圧縮方法の概要を次の表に示します。

    表4‒14 圧縮オブジェクトポインタ機能のモード一覧

    モード

    選択条件

    概要説明

    モード1

    Javaヒープ領域の総サイズが4GB未満であり,仮想アドレス空間上,Javaヒープ領域が4GBよりも低位側に存在する場合

    最も簡単な計算方法で,Javaオブジェクトのサイズを圧縮します。

    モード2

    モード1の適用ができないで,仮想アドレス空間上,そのヒープ領域が32GBよりも低位側に存在する場合

    モード1の次に簡単な計算方法によってJavaオブジェクトのサイズを圧縮します。

    モード3

    モード1とモード2が適用できなかった場合

    これらモードのうち,最も複雑な方法でJavaオブジェクトの圧縮をします。

    注※

    表に示した内容はJavaVMの内部処理を参考として示したものです。以降のJDKのアップデートや修正によって予告なく変更される場合があります。