- PR -

JVMの種類について(クライアントVM/サーバVM)

投稿者投稿内容
84
ベテラン
会議室デビュー日: 2005/11/04
投稿数: 83
投稿日時: 2006-11-07 09:20
J2SE 5.0から javaオプションで特に指定しないと
JVMが起動する種類を自動で決定してくれる、とドキュメントに書いてありました。

実際にどっちのJVMが起動しているかチェックしたいのですが、
JVM起動後に確認する方法って、どなたかご存知ありませんか?
(もしくは起動前でも)

また、サーバVMとクライアントVMの詳細な違いが知りたいのですが、
・起動時間がクライアントVMの方が短い
・サーバ実行速度がサーバVMの方が早い
以外に何か特徴的な違いってあるのでしょうか?
またそれぞれの詳細な違い等、ご存知の方いらっしゃったらご教授ください。

よろしくお願いいたします。
uk
ぬし
会議室デビュー日: 2003/05/20
投稿数: 1155
お住まい・勤務地: 東京都
投稿日時: 2006-11-07 10:25
引用:

84さんの書き込み (2006-11-07 09:20) より:
J2SE 5.0から javaオプションで特に指定しないと
JVMが起動する種類を自動で決定してくれる、とドキュメントに書いてありました。

実際にどっちのJVMが起動しているかチェックしたいのですが、
JVM起動後に確認する方法って、どなたかご存知ありませんか?


起動後に確認する方法はわかりませんが、どのような場合にserver VMが選択される
かは、以下のドキュメントに書かれています。

http://sdc.sun.co.jp/java/docs/j2se/1.5.0/ja/docs/ja/guide/vm/server-class.html

引用:

また、サーバVMとクライアントVMの詳細な違いが知りたいのですが、
・起動時間がクライアントVMの方が短い
・サーバ実行速度がサーバVMの方が早い
以外に何か特徴的な違いってあるのでしょうか?
またそれぞれの詳細な違い等、ご存知の方いらっしゃったらご教授ください。


以下を読んでみてください。

http://sdc.sun.co.jp/java/docs/j2se/1.5.0/ja/docs/ja/guide/vm/index.html
ToGo
常連さん
会議室デビュー日: 2002/03/16
投稿数: 46
投稿日時: 2006-11-07 17:57
HotSpotのClient VM、Server VMどちらが選択されるかを調べる方法として、
アプリケーション実行前なら、java -version で表示されるメッセージを読むと判別できます。
アプリケーション実行時に合わせて調べるなら、環境変数_JAVA_LAUNCHER_DEBUGを定義すると起動時にデバッグメッセージが表示されます。メッセージ中のJVM Pathの行を見れば、ディレクトリ名からclientかserverが判別できます。以下Windowsでの表示例を示しますが、Linux/Solaris等においても同様です。
コード:
----_JAVA_LAUNCHER_DEBUG----
JRE path is C:\\Program Files\\java\\jdk1.5.0\\jre
jvm.cfg[0] = ->-client<-
jvm.cfg[1] = ->-server<-
jvm.cfg[2] = ->-hotspot<-
    name: -hotspot  vmType: VM_ALIASED_TO  alias: -client
jvm.cfg[3] = ->-classic<-
jvm.cfg[4] = ->-native<-
jvm.cfg[5] = ->-green<-
457 micro seconds to parse jvm.cfg
Default VM: client
JVM path is C:\\Program Files\\java\\jdk1.5.0\\jre\\bin\\client\\jvm.dll
2198 micro seconds to LoadJavaVM
(以下省略)



JDKをインストールすると含まれているjvm.cfgファイルに、どのVMを使用するかの選択が記述されています。コマンドラインで指定しない場合、このファイルに記述された有効なVMが選択されます。複数記述されているときは、上に書かれたものが優先的に選択されます。ここを変更すれば、例えばデフォルトではClientVMが選択される環境でもServerVMを選択するよう変更することができます。以下は32bit Windows OSにインストールされたjvm.cfgファイルの内容です。-clientと-serverの行を入れ替えれば、デフォルトで選択されるVMはServerVMになります。
コード:
-client KNOWN
-server KNOWN
-hotspot ALIASED_TO -client
-classic WARN
-native ERROR
-green ERROR

さくらば
大ベテラン
会議室デビュー日: 2002/11/12
投稿数: 145
投稿日時: 2006-11-07 18:17
こんにちは、さくらばです。

引用:

84さんの書き込み (2006-11-07 09:20) より:
実際にどっちのJVMが起動しているかチェックしたいのですが、
JVM起動後に確認する方法って、どなたかご存知ありませんか?



jconsole などの JMX 管理ツールがあれば起動後に確認できます。
J2SE 5.0 の jconsole であれば、[VM] タブのコンパイラの箇所。
Java SE 6 の jconsole であれば [VMの概要] タブの JIT コンパ
イラの箇所に記述されています。

どちらも、RuntimeMXBean の VmName 属性の値が表示されています。
84
ベテラン
会議室デビュー日: 2005/11/04
投稿数: 83
投稿日時: 2006-11-08 09:20
ukさん
>起動後に確認する方法はわかりませんが、どのような場合にserver VMが選択される
>かは、以下のドキュメントに書かれています。
Windows系のプロセッサはi386しか書かれていなかったので、
他のはどうなのだろうと思って投稿した次第です。

>以下を読んでみてください。
読んだ上でより詳細な情報が欲しかったので投稿した次第です。

ToGoさん
詳細な情報ありがとうございます。
非常に参考になりました。

さくらばさん
jconsoleでも調べられるのですね。
情報ありがとうございます。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2006-11-08 09:27
-showversion オプションをつけるとバージョンを表示しつつプログラムの実行をしてくれます。
一応ヘルプ↓にも書いてあります。
> -showversion print product version and continue
unibon
ぬし
会議室デビュー日: 2002/08/22
投稿数: 1532
お住まい・勤務地: 美人谷        良回答(20pt)
投稿日時: 2006-11-08 09:51
実行中のプログラム内で、
http://java.sun.com/j2se/1.5.0/ja/docs/ja/api/java/lang/System.html#getProperties()

java.vm.name
あたりを見ればよいのではないでしょうか。

--
unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86}
ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 2006-11-08 23:31
Windows 32bitのSun JDK1.5.0_09 のpublic JRE ですと、
次の2つのシステムプロパティに情報がありますね。

java.exe 実行
 java.vm.name=Java HotSpot(TM) Client VM
 sun.management.compiler=HotSpot Client Compiler

java.exe -server を実行
 java.vm.name=Java HotSpot(TM) Server VM
 sun.management.compiler=HotSpot Server Compiler

なので、自分はプログラム起動時にこれらの情報をログに出力してたりします。

スキルアップ/キャリアアップ(JOB@IT)