JVM(Java仮想マシン)とは何かをテーマに、役割やJREとの違い、JVM Profilerなどの情報をまとめています。
この記事の目次です。
1. JVMとは
2. JVMの役割
3. JREとの違い
4. JVMの動作
5. JVM 引数
6. JVM Profiler
JVMとは、Javaのアプリケーションの実行環境を提供するソフトウェアです。
JVMはJava Virtual Machineの略です。日本語でJava仮想マシンといいます。
Java言語で開発されたソフトウェアは、 配布時にはプラットフォームから独立した独自の形式(Javaバイトコード)になっており、 これを実行するプラットフォーム固有の形式(ネイティブコード)に変換するソフトウェアを用意して、 変換しながら実行します。この変換と実行を行なうのがJVMです。
つまり、JVMをインストールすれば、 OSの違いを吸収してクラスファイルを実行してくれるので、 プラットフォームに依存しない、 いわゆるマルチプラットフォームを実現できるということです。
Javaの実行環境はJREとよばれるパッケージでその一部にJVMがあります。
JREは、Java Runtime Environmentの略でJavaの実行環境です。 Javaのプログラムを実行するために必要なソフトウェアのパッケージで、単体でパッケージとして配布されたり、JDKなどに含まれています。 JVMはこのJREに含まれるソフトウェアです。
JVMとJREの違いは、JREにはJVM以外にJavaのクラスライブラリなどが含まれる点です。
JVMは、クラスローダーでクラスファイルを読み込み、バイトコード検証を行って、実行エンジンがプログラムを実行します。
Javaプログラムは、.javaファイルでコーディングした後にJavaコンパイラを使用して、Javaバイトコードに変換してクラスファイル(.class)を生成します。
C言語などでは、コンパイラは特定のシステムのマシンコードを生成しますが、Javaコンパイラは、JVM用のコードであるJavaバイトコードを生成します。 JVMは、コンパイラがクラスファイルに生成したJavaバイトコードをプラットフォームのネイティブコードに変換して実行します。
JVMの動作イメージは以下です。
JVMの動作は、クラスローダーでクラスファイルを読み込み、バイトコード検証を行って、実行エンジンがプログラムを実行します。
JVM 引数は、Javaコマンド実行時の引数で、JVM実行時に指定するオプションです。
JVM引数の標準オプションは、Javaコマンドの「-help」オプションで確認できます。
java -help 使用方法: java [-options] class [args...] (クラスを実行する場合) または java [-options] -jar jarfile [args...] (jarファイルを実行する場合) optionsには次のものがあります。 -d32 使用可能な場合は32ビットのデータ・モデルを使用する -d64 使用可能な場合は64ビットのデータ・モデルを使用する -server "server" VMを選択する場合 デフォルトVMはserverです. -cp <ディレクトリおよびzip/jarファイルのクラス検索パス> -classpath <ディレクトリおよびzip/jarファイルのクラス検索パス> クラス・ファイルを検索するディレクトリ、 JARアーカイブおよびZIPアーカイブの;で区切られたリストです。 -D<name>=<value> システム・プロパティを設定する -verbose:[class|gc|jni] 詳細な出力を行う -version 製品バージョンを出力して終了する -version:<value> 警告: この機能は非推奨であり、詳細のリリースで 廃止されます。 指定したバージョンを実行に必須にする -showversion 製品バージョンを出力して続行する -jre-restrict-search | -no-jre-restrict-search 警告: この機能は非推奨であり、詳細のリリースで 廃止されます。 ユーザーのプライベートJREをバージョン検索に含める/除外する -? -help このヘルプ・メッセージを出力する -X 非標準オプションに関するヘルプを出力する -ea[:<packagename>...|:<classname>] -enableassertions[:<packagename>...|:<classname>] 指定した粒度でアサーションを有効にする -da[:<packagename>...|:<classname>] -disableassertions[:<packagename>...|:<classname>] 指定した粒度でアサーションを無効にする -esa | -enablesystemassertions システム・アサーションを有効にする -dsa | -disablesystemassertions システム・アサーションを無効にする -agentlib:<libname>[=<options>] ネイティブ・エージェント・ライブラリ<libname>をロードする。例: -agentlib:hprof -agentlib:jdwp=helpと-agentlib:hprof=helpも参照 -agentpath:<pathname>[=<options>] フルパス名でネイティブ・エージェント・ライブラリをロードする -javaagent:<jarpath>[=<options>] Javaプログラミング言語エージェントをロードする。java.lang.instrumentを参照 -splash:<imagepath> 指定したイメージでスプラッシュ画面を表示する 詳細はhttp://www.oracle.com/technetwork/java/javase/documentation/index.htmlを参照してください。
JVM 引数の非標準オプションは、ヒープサイズの指定でおなじみの「-X」から始まるオプションです。 これはJavaコマンドの「-X」オプションで確認できます。
java -X -Xmixed 混合モードの実行(デフォルト) -Xint インタプリタ・モードの実行のみ -Xbootclasspath:<;で区切られたディレクトリおよびzip/jarファイル> ブートストラップのクラスとリソースの検索パスを設定する -Xbootclasspath/a:<;で区切られたディレクトリおよびzip/jarファイル> ブートストラップ・クラス・パスの最後に追加する -Xbootclasspath/p:<;で区切られたディレクトリおよびzip/jarファイル> ブートストラップ・クラス・パスの前に付加する -Xdiag 追加の診断メッセージを表示する -Xnoclassgc クラスのガベージ・コレクションを無効にする -Xincgc 増分ガベージ・コレクションを有効にする -Xloggc:<file> タイムスタンプが付いたファイルにGCステータスのログを記録する -Xbatch バックグラウンドのコンパイルを無効にする -Xms<size> Javaの初期ヒープ・サイズを設定する -Xmx<size> Javaの最大ヒープ・サイズを設定する -Xss<size> Javaのスレッド・スタック・サイズを設定する -Xprof CPUプロファイル・データを出力する -Xfuture 将来のデフォルトを見越して、最も厳密なチェックを有効にする -Xrs Java/VMによるOSシグナルの使用を削減する(ドキュメントを参照) -Xcheck:jni JNI関数に対する追加のチェックを実行する -Xshare:off 共有クラスのデータを使用しようとしない -Xshare:auto 可能であれば共有クラスのデータを使用する(デフォルト) -Xshare:on 共有クラス・データの使用を必須にし、できなければ失敗する。 -XshowSettings すべての設定を表示して続行する -XshowSettings:all すべての設定を表示して続行する -XshowSettings:vm すべてのVM関連の設定を表示して続行する -XshowSettings:properties すべてのプロパティ設定を表示して続行する -XshowSettings:locale すべてのロケール関連の設定を表示して続行する -Xオプションは非標準なので、予告なく変更される場合があります。
-Xprofコマンドラインオプションは、CPUプロファイル・データを出力します。
-Xrsコマンドラインオプションは、Java VMによるオペレーティングシステムシグナルの使用を減らします。
-Xrsを指定した場合は、以下の影響があります。
Javaアプリケーションを正規の手順に従ってシャットダウンするためのシャットダウンフック機能ががあります。 この機能により、JVMが突然終了した場合でも、シャットダウン時にデータベース接続のクローズなどのユーザークリーンアップコードが実行できます。 JVMは、シグナルをキャッチすることによって、JVMの異常終了のためのシャットダウンフックを実装し、SIGHUP、SIGINT、および SIGTERM を使用して、シャットダウンフックの実行を開始します。
JVMは、デバッグ用のスレッドスタックをダンプする機能を実現するためにも、同様のメカニズムを使用します。 JVMは、スレッドダンプを実行するためにSIGQUITを使用します。
JVMを埋め込んでいるアプリケーションがSIGINTやSIGTERMなどのシグナルを頻繁にトラップする必要があると、JVMのシグナルハンドラの処理に支障が出る可能性があります。 -Xrsコマンドラインオプションを使用すると、SIGINT、SIGTERM、SIGHUP、およびSIGQUITに対するシグナルマスクは Java VMによって変更されず、これらのシグナルに対するシグナルハンドラはインストールされなくなります。
-XshowSettingsコマンドラインオプションは、すべての設定を表示して続行します。
「-XshowSettings:カテゴリ」のようにして指定します。カテゴリの部分は以下の指定が行えます。
すべての設定を表示して続行します。
すべてのVM関連の設定を表示して続行します。
すべてのプロパティ設定を表示して続行します。
すべてのロケール関連の設定を表示して続行します。
-XshowSettingsはそのまま実行するとJavaのヘルプなども出力されて、VM関連の設定やプロパティ設定、ロケール関連など目的の情報が見にくくなってしまいます。 そこで以下のように-versionコマンドライン引数も追加すると、ヘルプ表示がバージョン表示に置き換わって見やすくなります。
java -XshowSettings:all -version
JVM Profilerは、Uberが開発した分散型のプロファイラです。 現在はオープンソースになっています。
この記事の更新履歴です。
スポンサーリンク
サイト内のページ
言語
C・C++
/HTML
/Java
/JavaScript
/PHP
/シェルスクリプト
開発環境
Ant
/Burp
/Eclipse
/Fiddler
/gcc
/gdb
/Git
/g++
/JDK
/JMeter
/JUnit
/Teraterm
/ZAP
技術・仕様
Ajax
/CORBA
/Jakarta EE(旧称J2EE、Java EE)
/JNI
ライブラリ/Framework/CMS
bootstrap
/jQuery
/FuelPHP
/Lucene
/MyBatis
/Seasar2
/Spring
/Struts
/WordPress
Web API
Google Maps
ITインフラOSとミドルウェア
Linux
/Windows
/シェル
ActiveMQ
/Tomcat
/MariaDB
/MySQL
/Nagios
/Redis
/Solr
ITインフラセキュリティ
公開サーバーのセキュリティ
SI
ホームページの作り方
スポンサーリンク
関連サイト内検索ツール
zealseedsおよび関連サイト内のページが検索できます。
IPアドレス確認ツール
あなたのグローバルIPアドレスは以下です。
3.137.185.16
HTMLの表示色確認ツール
パスワード生成ツール
文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。
ここに生成されます。
スポンサーリンク
Copyright (C) 2007-2024 zealseeds. All Rights Reserved. Loarding…