Java仮想マシン
日本語 | ジャバ仮想機械 |
英語 | Java virtual machine |
ふりがな | じゃばかそうましん |
フリガナ | ジャバカソウマシン |
Javaのプログラムを実行する環境。
各OSに「実行ファイル」として存在する。実行後、クラスファイルを読み込み、クラス内のメソッドを呼び出し実行する。
その際、プログラムからは「実行されたPCのOS」ではなく「仮に作られたOS」で実行されたかのように見える。メモリやCPUの見掛け上の挙動は「仮想マシン」という特別に作られた環境によってみせかけられ、結果、プログラムは「自分が実行されたOS」を考慮する必要がなくなり、プログラムはOSに依存しなくなる。OSに依存する箇所は仮想マシンが本当のOSとの仲介役となる。
ただし、仮想マシンはすべて覆い隠せるわけではなく、OSに依存したプログラムが必要な場合もある。また、それぞれのOSが持つ機能を直接呼び出す方法もある。
マシンの性能が低い場合、仮想マシンが仲介役となるため処理が重くなることがある。Javaが当初は広まらなかった理由のひとつでもある。
各OSに「実行ファイル」として存在する。実行後、クラスファイルを読み込み、クラス内のメソッドを呼び出し実行する。
その際、プログラムからは「実行されたPCのOS」ではなく「仮に作られたOS」で実行されたかのように見える。メモリやCPUの見掛け上の挙動は「仮想マシン」という特別に作られた環境によってみせかけられ、結果、プログラムは「自分が実行されたOS」を考慮する必要がなくなり、プログラムはOSに依存しなくなる。OSに依存する箇所は仮想マシンが本当のOSとの仲介役となる。
ただし、仮想マシンはすべて覆い隠せるわけではなく、OSに依存したプログラムが必要な場合もある。また、それぞれのOSが持つ機能を直接呼び出す方法もある。
マシンの性能が低い場合、仮想マシンが仲介役となるため処理が重くなることがある。Javaが当初は広まらなかった理由のひとつでもある。
参考サイト
- (参考サイトはありません)
// Sample.java
public class Sample
{
public static void main( String[] args )
{
// int 型変数のビットを出力します。
int i = 255;
StringBuffer strbuf = new StringBuffer();
// 全ビットを右からチェックします。
for( int iF1 = 0; iF1 < 32; ++iF1 )
{
// 取得した順に出力すると逆順になるので、
// 取得した値を頭に挿入していきます。
strbuf.insert( 0, i & 1 );
// 右にひとつビットシフトします。
i = i >> 1;
}
// 出力。
System.out.println( strbuf );
// 00000000000000000000000011111111
// もし、メモリやCPUがOSに依存している場合、
// このビットの並びはOSのバイトオーダーに
// 依存します。ですが、Javaでは、仮想マシンが
// 「バイトオーダーはビッグエンディアン」と
// 決めているため、プログラムは実行されるOSを
// 気にすることなく「ビッグエンディアンで並ぶ」
// と決めつけて書くことができます。これが、
// Javaプログラムが仮想マシン上で動くメリットの
// ひとつです。
}
}
public class Sample
{
public static void main( String[] args )
{
// int 型変数のビットを出力します。
int i = 255;
StringBuffer strbuf = new StringBuffer();
// 全ビットを右からチェックします。
for( int iF1 = 0; iF1 < 32; ++iF1 )
{
// 取得した順に出力すると逆順になるので、
// 取得した値を頭に挿入していきます。
strbuf.insert( 0, i & 1 );
// 右にひとつビットシフトします。
i = i >> 1;
}
// 出力。
System.out.println( strbuf );
// 00000000000000000000000011111111
// もし、メモリやCPUがOSに依存している場合、
// このビットの並びはOSのバイトオーダーに
// 依存します。ですが、Javaでは、仮想マシンが
// 「バイトオーダーはビッグエンディアン」と
// 決めているため、プログラムは実行されるOSを
// 気にすることなく「ビッグエンディアンで並ぶ」
// と決めつけて書くことができます。これが、
// Javaプログラムが仮想マシン上で動くメリットの
// ひとつです。
}
}
// Sample.java public class Sample { public static void main( String[] args ) { // int 型変数のビットを出力します。 int i = 255; StringBuffer strbuf = new StringBuffer(); // 全ビットを右からチェックします。 for( int iF1 = 0; iF1 < 32; ++iF1 ) { // 取得した順に出力すると逆順になるので、 // 取得した値を頭に挿入していきます。 strbuf.insert( 0, i & 1 ); // 右にひとつビットシフトします。 i = i >> 1; } // 出力。 System.out.println( strbuf ); // 00000000000000000000000011111111 // もし、メモリやCPUがOSに依存している場合、 // このビットの並びはOSのバイトオーダーに // 依存します。ですが、Javaでは、仮想マシンが // 「バイトオーダーはビッグエンディアン」と // 決めているため、プログラムは実行されるOSを // 気にすることなく「ビッグエンディアンで並ぶ」 // と決めつけて書くことができます。これが、 // Javaプログラムが仮想マシン上で動くメリットの // ひとつです。 } }
「サンプルプログラムとか」に含まれているページ
- (参照している単語はありません)