ヘッダーをスキップ
Oracle® JRockitの紹介
リリースR28
B61437-02
  目次へ移動
目次

前
 
次
 

3 スレッドとロックの概要

この章では、JRockit JVMのスレッドとロックに関する基本情報を示します。

実行中のアプリケーションは、通常、独自のメモリー領域を持つ1つのプロセスで構成されます。一般に、コンピュータは同時に複数のプロセスを実行しています。たとえば、ワード・プロセッサ・アプリケーション・プロセスがメディア・プレーヤ・アプリケーション・プロセスと同時に実行される場合があります。プロセスは同時に実行されている多数のスレッドで構成されます。Javaアプリケーションを実行すると、新しいJVMプロセスが開始されます。

各Javaプロセスには少なくとも1つのアプリケーション・スレッドがあります。アプリケーション・スレッドに加えて、Oracle JRockit JVMではガベージ・コレクション、コード生成、およびその他の内部目的のために内部スレッドが使用されます。

スレッド・ダンプ(アプリケーションの全スレッドのスタックの出力)を使用すると、問題を診断して、アプリケーションやJVMのパフォーマンスを最適化することができます。スレッド・ダンプの生成の詳細は、Oracle JRockit JDKツールのスレッド・ダンプの使用に関する項を参照してください。

次の各項で、JRockit JVMのスレッドとロックについて説明します。

3.1 スレッドの概要

Javaアプリケーションは、Javaコードを実行する1つ以上のスレッドで構成されます。JVMプロセスは、JavaスレッドといくつかのJVM内部スレッドで構成されます。たとえば、1つ以上のガベージ・コレクション・スレッド、1つのコード・オプティマイザ・スレッド、1つ以上のファイナライザ・スレッドなどがあります。

オペレーティング・システムは、アプリケーション・スレッドと同様にJavaスレッドを扱います。スレッドのスケジューリングおよび優先順位はオペレーティング・システムによって処理されます。

Java内で、Javaスレッドはスレッド・オブジェクトによって表されます。各スレッドには、実行時データを格納するスタックもあります。スレッド・スタックには一定のサイズが定められています。スレッドは、スタック・サイズの許容量を超える項目を格納しようとすると、スタック・オーバーフロー・エラーをスローします。

Javaアプリケーション・スレッドのデフォルト・スタック・サイズ

デフォルト・スタック・サイズは、使用するオペレーティング・システムによって異なります。表3-1に、各オペレーティング・システムのデフォルト・スタック・サイズの一覧を表示します。

表3-1 デフォルト・スタック・サイズ

オペレーティング・システム デフォルト・スタック・サイズ

Windows IA32

64KB

Windows x64

128KB

Linux IA32

128KB

Linux x64

256KB

Solaris/SPARC

512KB


スレッド・スタック・サイズは-Xssコマンド・ライン・オプションで変更できます(java -Xss:512k MyApplication)。

JVM内部スレッドのデフォルト・スタック・サイズ

ガベージ・コレクション・スレッドやコード生成スレッドなどのJVM内部スレッドでは、特別な「システム」スタック・サイズ(すべてのプラットフォームで256KB)が使用されます。


注意:

-Xssコマンドライン・オプションは、アプリケーション・スレッドとJVM内部スレッドの両方のスタック・サイズを設定します。

3.2 ロックの概要

プロセス内の複数のスレッドが同じデータを共有して更新する場合は、エラーが発生しないようにそのアクティビティを同期化する必要があります。Javaでは、synchronizedキーワード、またはwaitキーワードとnotifyキーワードを使用してこれを行います。同期化はロックを使用して行われます。各ロックはオブジェクトに関連付けられています。スレッドがオブジェクトを処理するには、それに関連付けられているロックを制御(保持)する必要があります。ロックを保持できるのは一度に1つのスレッドのみです。スレッドが別のスレッドに保持されているロックを取得しようとする場合は、そのロックが解放されるまで待機する必要があります。このような状況が発生した場合、ロックの競合があります。

4つのタイプのロックがあります。

JRockit JVMでは複雑な一連のヒューリスティックを使用して、あるタイプのロックを他のタイプに変更するタイミングが決定されます。

ロック・チェーン

複数のスレッドがロック・チェーンと呼ばれる状態になる場合があります。ロック・チェーンは次のように定義できます。

ロック・チェーンのタイプ

JRockit JVMはスレッドを分析して完全なロック・チェーンを形成します。ロック・チェーンには開いたロック・チェーン、デッドロック・チェーン、ブロックされたロック・チェーンの3つの可能なタイプがあります。