JDK8からJDK11への移行
JDK11への移行は、以下の「移行ガイド」を参考にしてください。
https://docs.oracle.com/javase/jp/11/migrate/index.html |
JDKツール
各ツールの注意事項は、"1.2.2 JDK ツール"を参照してください。
OSの仮想メモリー管理
OSの仮想メモリー管理は、malloc()関数による仮想メモリー獲得要求を処理する際、プロセス内の各スレッドごとに、64メガバイトの大きさを1単位とした「malloc()用領域」を確保(リザーブ)します。
そのため、malloc()関数を実行(他の関数の延長でmalloc()関数が間接的に実行された場合も含む)するスレッドの数が多いプロセスを実行した場合、OSの仮想メモリー管理によるスレッド数に依存した「malloc()用領域」の確保により、同一のプログラムを実行するプロセスの場合でも、当該プロセスに対して確保される仮想メモリーが大きくなる場合があります。
確保された「malloc()用領域」のうち、実際に使用される仮想メモリー量(システム資源量)は、各スレッドのmalloc()関数で指定された要求量と、OSによる仮想メモリー管理用制御域の大きさの総和です。
psコマンドを使用し、仮想メモリー量(VSZ)の値を参照することで確認できます。
ハードウェア資源の動的再構成機能
アプリケーションを実行するハードウェア環境によっては、「DR(Dynamic Reconfiguration)機能」のハードウェア資源の動的再構成機能が利用できる場合があります。
ハードウェア資源の動的再構成機能を利用する場合、以下の注意が必要です。
Javaプロセスの再起動
OSから見たプロセッサー数が、シングルプロセッサーからマルチプロセッサー、またはマルチプロセッサーからシングルプロセッサーへとCPU数が変化する場合は、Javaプロセスの停止後に構成変更をしてください。
マルチプロセッサーからマルチプロセッサーへの変化の場合は、Javaプロセスの停止は不要です。
実行するJavaアプリケーションへの考慮
システム運用中にCPU数が変化するため、以下のJava APIを使用するJavaアプリケーションは、アプリケーション実行中にCPU数が動的に変化する可能性があることを考慮して各処理を実装する必要があります。
利用可能なCPU数に影響を受けるJavaアプリケーションは、ポーリング処理などにより処理を調整する必要があります。
Java Platform API仕様:
java.lang.Runtime#availableProcessors()
java.lang.management.OperatingSystemMXBean#getAvailableProcessors()
JVMTI(Java Virtual Machine Tool Interface):
GetAvailableProcessors()
Exception発生時に「<<no stack trace available>>」となる場合
Javaアプリケーション実行でExceptionが発生した場合に、スタックトレースが出力されず代わりに「<<no stack trace available>>」と出力される場合があります。
これはJava VM内部でExceptionを生成する際、「スタックトレース出力の情報」を格納するためのJavaヒープが不足していることになります。
このような場合、Java VMでは、java.lang.OutOfMemoryErrorを発行しないため、Javaのヒープサイズ(メモリー割り当てプールの大きさ)を大きくするなど対策をとり、Javaヒープの空きを十分に取った上でスタックトレースを確認してください。
スタックトレースについては、"3.1 スタックトレース"を参照してください。
SwingやAWTなどを使用したGUIアプリケーションについて
GUIアプリケーションを実行すると、以下のメッセージが出力される場合があります。
Gtk-Message: xx:xx:xx.xxx: Failed to load module "canberra-gtk-module" |
本メッセージが出力された場合、以下のライブラリーをインストールしてください。
libcanberra-gtk2
GUIアプリケーションで日本語を表示する場合、以下のパッケージをインストールしてください。
vlgothic-fonts