Interstage Application Serverにおける、JNI(Java Native Interface)のJNI_CreateJavaVM()関数の障害が、JDK/JRE 1.4.1以前では発生しない理由を教えてください。

緊急修正T027HS-05などで修正されている、障害レポート番号PG68123のJNI_CreateJavaVM()関数の障害は、発生条件がJDK/JRE 1.4.2および5.0で、1.4.1以前のバージョンが対象になっていません。JDK/JRE 1.4.1以前では発生しない理由を教えてください。
PG68123(注)の障害は、Java VMのスタックに対する制御処理に起因したもので、スタックに対する処理がJDK/JRE 1.4.1以前と1.4.2以降で異なるため、対象がJDK/JRE 1.4.2および5.0だけとなっています。なお、JDK/JRE 1.4.1以前と1.4.2以降で、JNI_CreateJavaVM()関数の仕様に変更はありません。

(注)PG68123の現象および条件

■障害現象

JNI_CreateJavaVM()を直接使用するJavaアプリケーションのスタックサイズ状態によって、Javaアプリケーションが異常終了する場合やJavaプロセスの起動に失敗する場合があります。なお、使用するJava VMのバージョンおよびJava VMに対する修正の適用状態により、発生現象/発生条件が異なります。
(注:mainスレッド=JNI_CreateJavaVM()を実行したスレッド)

  • 発生現象a:
    mainスレッドに対して割り当てられているスタックサイズよりも少ない使用量の時点でjava.lang.StackOverflowErrorを検出してしまい、その結果、Javaアプリケーションが終了する場合があります。


  • 発生現象b:
    mainスレッドにおいてjava.lang.StackOverflowErrorを検出することができず、Javaプロセスが異常終了する場合があります。


  • 発生現象c:
    Java VM初期化エラーでJavaアプリケーションの起動に失敗する場合があります。


■発生条件

  1. Solaris OS上で、JDK/JRE 1.4.2または5.0のJava VMを使用して、Javaアプリケーションを実行している。かつ、

  2. 1.上で実行するJavaアプリケーションにおいて、javaコマンドなどJDK/JREが提供するJDKツールを使用せず、Javaアプリケーション自身がJNI関数であるJNI_CreateJavaVM()を直接使用してJava VMを起動している。かつ、

  3. 以下の条件を満たす場合(注:1.で使用するJava VMのバージョンおよびJava VMに対する修正の適用状態により、発生現象が異なります)。


    発生現象aの場合:
    1. JDK/JRE 1.4.2のJava VMにおいて、PG45987に対応する修正が未適用の場合。かつ、

    2. mainスレッドに対して512Kバイト以上のスタックが割り当てられている。かつ、

    3. 実行するJavaアプリケーションでは、mainスレッドで512Kバイト以上のスタックを使用する場合。


    発生現象bの場合:
    1. JDK/JRE 1.4.2のJava VM(PG45987に対応する修正が適用済)またはJDK/JRE 5.0のJava VMにおいて、PG58340に対応する修正が未適用の場合。かつ、

    2. mainスレッドに対するスタックサイズが8Mバイトより小さい。かつ、

    3. mainスレッドに対するスタックサイズがページサイズの倍数でない。かつ、

    4. 実行するJavaアプリケーションのmainスレッドにおいて、スタックオーバーフロー状態が発生した場合。


    発生現象cの場合:
    1. JDK/JRE 1.4.2のJava VM(PG45987に対応する修正が適用済)またはJDK/JRE 5.0のJava VMにおいて、PG58340に対応する修正が適用済の場合。かつ、

    2. mainスレッドに対するスタックサイズが8Mバイトより小さい。かつ、

    3. mainスレッドに対するスタックサイズがページサイズの倍数でない。

製品・サービス区分 Interstage
製品・サービス情報
対象製品 Interstage Application Server
バージョン V9, V8, V7
プラットフォーム Solaris
アンサー種別 運用/保守
このページの先頭へ