便利なキーワード検索サイト ことなびトップページへ
デル株式会社







ことなびTOP  サイトマップ  ことなびとは?



便利!NINJA TOOLS
→FC2検索 用語 Wikipedia YouTube

Java仮想マシン とは?

 ページ内リンク   ↓ウィキペディア(Wikipedia)記事  ↓Yahoo!知恵袋

Java仮想マシン (Java Virtual Machine, Java VM, JVM) は、Javaバイトコードとして定義された命令セットを実行するスタック型の仮想マシンAPIやいくつかのツールとセットでJava Runtime Environment (JRE) としてリリースされている。この環境を移植することで、さまざまな環境でJavaのプログラムを実行することができる。

出典: 『ウィキペディア(Wikipedia)』


ノースウエスト航空 のマイルは、国内航空会社のマイレージと違って無期限!! 格安パックツアーでも
100%マイルが付くのでお得!! 国内往復分15000マイルを貯めて沖縄や北海道へ!!


関連商品

本  The Java仮想マシン仕様 (The Java Series)別ウィンドウで表示

ティム リンドホルム /  最安値(中古): ¥ 4,989 
おすすめ度5.0(全レビューの平均)Javaのコンパイラをはじめとする開発環境を開発するならこの本を持っている必要があり、内容も逐一理解しなければならないでしょう。そういう意味でJVMの必須リファレンスだと言えると思います。Javaに類似したプログラミング言語を設計、実装しようと考えている方々にも重要な一冊です。バイトコードの構造やJVMのインストラクションセットの説明など、説明は包括的で非常にクリアです。一方、Javaのコードがどのように動作するのかを理解したいと考えるアプリケーションプログラマにとっても得るものが多い本だと思います。ただし、本書はJVMの「仕様書」なので、内容の理解しやすさを期待してはいけません。JVMのチュートリアルとしては、「Inside The Java Virtual Machine(Bill Venners、McGraw-Hill )」などが優れていると思います。チュートリアル的な本を読みつつ本書を適宜参照するというのもJVM学習の一方法かと。  (鈴木純一 さんのレビュー)

本  Java仮想マシン仕様 (The Java series)別ウィンドウで表示

ティム リンドホルム /  最安値(新品): ¥ 4,200 
私はソフトウェア開発者で、専門はコンパイラ開発。ある時、あるターゲット・マシン用のJava VMを創る事になり、本書を手に取った。本書はVMの動作を公式(Sun認定)に規定した唯一の書であり、VM開発者にとっては必携の書である。 VM用命令セットの考え方は、Wirth博士のP-codeを土台にしている事は明らかだが、それに対してSunの設計者が何を考え、何を変えたかが分かって興味深い。また、記述の形式が統一されていて、各命令(中間コード)の動作がその統一された形式で書かれているので紛れがない。私は、開発のために本書を読んだので、ボロボロになるまで読み尽くしたが、Javaの各命令(中間コード)の意味付けの理解、また新たにこうした中間コードの設計を志す方には、目を通すだけでも参考になるだろう。 Javaの中身を垣間見ようとする方には興味深く、またVM開発者には必携の書。  (紫陽花 さんのレビュー)




ウィキペディア(Wikipedia)記事


Java仮想マシン (Java Virtual Machine, Java VM, JVM) は、Javaバイトコードとして定義された命令セットを実行するスタック型の仮想マシンAPIやいくつかのツールとセットでJava Runtime Environment (JRE) としてリリースされている。この環境を移植することで、さまざまな環境でJavaのプログラムを実行することができる。

目次

命令セット仕様

ニーモニック表

  0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f
0x00 0x00
nop
0x01
aconst_null
0x02
iconst_m1
0x03
iconst_0
0x04
iconst_1
0x05
iconst_2
0x06
iconst_3
0x07
iconst_4
0x08
iconst_5
0x09
lconst_0
0x0a
lconst_1
0x0b
fconst_0
0x0c
fconst_1
0x0d
fconst_2
0x0e
dconst_0
0x0f
dconst_1
0x10 0x10
bipush
0x11
sipush
0x12
ldc
0x13
ldc_w
0x14
ldc2_w
0x15
iload
0x16
lload
0x17
fload
0x18
dload
0x19
aload
0x1a
iload_0
0x1b
iload_1
0x1c
iload_2
0x1d
iload_3
0x1e
lload_0
0x1f
lload_1
0x20 0x20
lload_2
0x21
lload_3
0x22
fload_0
0x23
fload_1
0x24
fload_2
0x25
fload_3
0x26
dload_0
0x27
dload_1
0x28
dload_2
0x29
dload_3
0x2a
aload_0
0x2b
aload_1
0x2c
aload_2
0x2d
aload_3
0x2e
iaload
0x2f
laload
0x30 0x30
faload
0x31
daload
0x32
aaload
0x33
baload
0x34
caload
0x35
saload
0x36
istore
0x37
lstore
0x38
fstore
0x39
dstore
0x3a
astore
0x3b
istore_0
0x3c
istore_1
0x3d
istore_2
0x3e
istore_3
0x3f
lstore_0
0x40 0x40
lstore_1
0x41
lstore_2
0x42
lstore_3
0x43
fstore_0
0x44
fstore_1
0x45
fstore_2
0x46
fstore_3
0x47
dstore_0
0x48
dstore_1
0x49
dstore_2
0x4a
dstore_3
0x4b
astore_0
0x4c
astore_1
0x4d
astore_2
0x4e
astore_3
0x4f
iastore
0x50 0x50
lastore
0x51
fastore
0x52
dastore
0x53
aastore
0x54
bastore
0x55
castore
0x56
sastore
0x57
pop
0x58
pop2
0x59
dup
0x5a
dup_x1
0x5b
dup_x2
0x5c
dup2
0x5d
dup2_x1
0x5e
dup2_x2
0x5f
swap
0x60 0x60
iadd
0x61
ladd
0x62
fadd
0x63
dadd
0x64
isub
0x65
lsub
0x66
fsub
0x67
dsub
0x68
imul
0x69
lmul
0x6a
fmul
0x6b
dmul
0x6c
idiv
0x6d
ldiv
0x6e
fdiv
0x6f
ddiv
0x70 0x70
irem
0x71
lrem
0x72
frem
0x73
drem
0x74
ineg
0x75
lneg
0x76
fneg
0x77
dneg
0x78
ishl
0x79
lshl
0x7a
ishr
0x7b
lshr
0x7c
iushr
0x7d
lushr
0x7e
iand
0x7f
land
0x80 0x80
ior
0x81
lor
0x82
ixor
0x83
lxor
0x84
iinc
0x85
i2l
0x86
i2f
0x87
i2d
0x88
l2i
0x89
l2f
0x8a
l2d
0x8b
f2i
0x8c
f2l
0x8d
f2d
0x8e
d2i
0x8f
d2l
0x90 0x90
d2f
0x91
i2b
0x92
i2c
0x93
i2s
0x94
lcmp
0x95
fcmpl
0x96
fcmpg
0x97
dcmpl
0x98
dcmpg
0x99
ifeq
0x9a
ifne
0x9b
iflt
0x9c
ifge
0x9d
ifgt
0x9e
ifle
0x9f
if_icmpeq
0xa0 0xa0
if_icmpne
0xa1
if_icmplt
0xa2
if_icmpge
0xa3
if_icmpgt
0xa4
if_icmple
0xa5
if_acmpeq
0xa6
if_acmpne
0xa7
goto
0xa8
jsr
0xa9
ret
0xaa
tableswitch
0xab
lookupswitch
0xac
ireturn
0xad
lreturn
0xae
freturn
0xaf
dreturn
0xb0 0xb0
areturn
0xb1
return
0xb2
getstatic
0xb3
putstatic
0xb4
getfield
0xb5
putfield
0xb6
invokevirtual
0xb7
invokespecial
0xb8
invokestatic
0xb9
invokeinterface
a 0xbb
new
0xbc
newarray
0xbd
anewarray
0xbe
arraylength
0xbf
athrow
0xc0 0xc0
checkcast
0xc1
instanceof
0xc2
monitorenter
0xc3
monitorexit
0xc4
wide
0xc5
multianewarray
0xc6
ifnull
0xc7
ifnonnull
0xc8
goto_w
0xc9
jsr_w
0xca
breakpoint
b c d e f
0xd0 0 1 2 3 4 5 6 7 8 9 a b c d e f
0xe0 0 1 2 3 4 5 6 7 8 9 a b c d e f
0xf0 0 1 2 3 4 5 6 7 8 9 a b c d 0xfe
impdep1
0xff
impdep2

オペコード解説

配列 =

  • iaload, laload, faload, daload, aaload, baload, caload, saload - 配列からint, long, float, double, オブジェクト, byteまたはboolean, char, shortを取り出す。
  • iastore, lastore, fastore, dastore, aastore, bastore, castore, sasoter - 配列にint, long, float, double, オブジェクト, byteまたはboolean, char, shortを格納。
  • newarray - 数値や文字の配列を作成。
  • anewarray - オブジェクト配列を作成。
  • multianewarray - 多次元配列を作成。
  • arraylength - 配列の長さを取得

メソッド呼び出し

  • invokevirtual - インスタンスメソッドを呼び出す。
  • invokespecial - インスタンス初期化メソッド、privateメソッド、スーパークラスのインスタンスメソッドを呼び出す。
  • invokestatic - staticメソッドを呼び出す
  • invokeinterface - インターフェイスメソッドを呼び出す

return

  • return - 返値なしでreturn
  • ireturn, lreturn, freturn, dreturn, areturn - int, long, float, double, オブジェクトを返値としてreturnする。

比較

  • dcmpg, dcmpl - double同士を比較。NaNの時は1, -1。
  • fcmpg, fcmpl - float同士を比較。NaNの時は1, -1。
  • lcmp - long同士を比較。

条件分岐

  • ifeq, ifnull, iflt, ifle, ifne, ifnonnull, ifgt, ifge - スタックの値が0, null, 0未満, 0以下, 0以外, null以外, 0より大きい, 0以上ならジャンプする
  • if_icmpeq, if_icmpne, if_icmplt, if_icmpgt, if_icmple, if_icmpge - 2つのint値が等しい、等しくない、<、>、≦、≧ならジャンプする
  • if_acmpeq, if_acmpne - 2つのオブジェクトが同一、異なるオブジェクトを参照していたらジャンプする。

ジャンプ

  • goto, goto_w - 現在のプログラムカウンタにそれぞれ2,4バイト加えたアドレスに制御が移る。
  • jsr, jsr_w - サブルーチンへジャンプする。gotoと違い戻りアドレスを保存する。戻りアドレスの値はそれぞれジャンプ前のアドレス+3,5となる。
  • ret - サブルーチンの呼び出し元に戻る。アドレスが格納されているローカル変数を指定する。
  • lookupswitch - switch文のcase式の値が不連続である場合値を探しながらジャンプ先を探す。
  • tableswitch - switch文のcase式の値が連続である場合キー値をindexとしジャンプ先アドレスを値とする配列を作り高速にジャンプする。

スタックに積む

  • bipush, sipush - byte, shortをスタックに積む。
  • ldc - コンスタントプール内の4バイトの定数(int,float,String)の内1バイト以内でエントリ番号を指定できるものをスタックに積む。
  • ldc_w - エントリ番号が1バイトでは足りないときに使う。
  • ldc2_w - コンスタントプール内の8バイトの定数(long,double)をスタックに積む。
  • iconst_m1, iconst_0, iconst_1, iconst_2, iconst_3, iconst_4, iconst_5 - intの-1,0,1,2,3,4,5をスタックに積む。
  • lconst_0, lconst_1 - longの0,1をスタックに積む
  • fconst_0, fconst_1, fconst_2 - floatの0,1,2をスタックに積む
  • dconst_0, dconst_1 - doubleの0,1をスタックに積む。
  • aconst_null - スタックにnullを積む。

スタック編集

  • pop, pop2 - スタックから1,2ワード取り除く
  • dup, dup2
  • dup_x1, dup2_x1
  • dup_x2, dup2_x2
  • swap

ローカル変数

  • iload, lload, fload, dload, aload - ローカル変数からint, long, float, double, オブジェクトを取り出してスタックに積む。
  • iload_0, iload_1, iload_2, iload_3 - n番目のローカル変数からintを取り出してスタックに積む。
  • lload_0, lload_1, lload_2, lload_3 - n番目のローカル変数からlongを取り出してスタックに積む。
  • fload_0, fload_1, fload_2, fload_3 - n番目のローカル変数からfloatを取り出してスタックに積む。
  • dload_0, dload_1, dload_2, dload_3 - n番目のローカル変数からdoubleを取り出してスタックに積む。
  • aload_0, aload_1, aload_2, aload_3 - n番目のローカル変数からオブジェクトを取り出してスタックに積む。
  • istore, lstore, fstore, dstore, astore - int, long, float, double, オブジェクトをローカル変数に格納。
  • istore_0, istore_1, istore_2, istore_3 - intをn番目のローカル変数に格納。
  • lstore_0, lstore_1, lstore_2, lstore_3 - longをn番目のローカル変数に格納。
  • fstore_0, fstore_1, fstore_2, fstore_3 - floatをn番目のローカル変数に格納。
  • dstore_0, dstore_1, dstore_2, dstore_3 - doubleをn番目のローカル変数に格納。
  • astore_0, astore_1, astore_2, astore_3 - オブジェクトをn番目のローカル変数に格納。

型キャスト

  • checkcast - オブジェクトまたは配列の型を確認。
  • instanceof - スタックからオブジェクト参照をpopし、それが指定された型と同じであれば「1」を、異なれば「0」をスタックに積む。
  • i2l, i2f, i2d, i2b, i2c, i2s - intからlong, float, double, byte, char, shortに型キャスト
  • l2i, l2f, l2d - longからint, float, doubleに型キャスト
  • f2i, f2l, f2d - floatからint, long, doubleに型キャスト
  • d2i, d2l, d2f - doubleからint, long, floatに型キャスト

算術演算

  • iinc
  • iadd, ladd, fadd, dadd - int, long, float, double同士の足し算
  • isub, lsub, fsub, dsub - int, long, float, double同士の引き算
  • imul, lmul, fmul, dmul - int, long, float, double同士の掛け算
  • idiv, ldiv, fdiv, ddiv - int, long, float, double同士の割り算
  • irem, lrem, frem, drem - int, long, float, double同士の余り
  • ineg, lneg, fneg, dneg - int, long, float, doubleの符号反転

論理演算

  • ishl, lshl
  • ishr, lshr
  • iushr, lushr
  • iand, land
  • ior, lor
  • ixor, lxor

オブジェクト

  • new - オブジェクトの生成
  • putfield, getfield - メンバ変数の設定、取り出し
  • putstatic, getstatic - static変数の設定、取り出し

その他

  • athrow - 例外を発生させる
  • nop - なにもしない
  • breakpoint
  • monitorenter - ロック取得
  • monitorexit - ロック解放
  • wide

実装系

エンタープライズ用(デスクトップ用を包含)としては、SunIBMBEAHPなどの各社から実装系がリリースされている。 OS上でアプリケーションとして動作する形態が一般的であるが、Azul Systems社のAzul Compute Applianceのようにバイトコードを実行を外部のプロセッサで行うタイプも存在する。

この節は執筆の途中です この節は執筆中です。加筆、訂正して下さる協力者を求めています。

バイトコード解釈

初期のJava VMはインタプリタ型であったため、動作速度が他のアプリケーションに比べて遅い場合があった。そのため、メソッドの実行直前(Just in Time)にバイトコードをCPUのネイティブコードにコンパイルして実行する形式(JITコンパイラ)を、BorlandIBMなどがリリースした。SunHotSpotという高速化技術を導入した。 HotSpotJITコンパイラの一種だが、常にJITコンパイルを行うのではなく、実行回数が規定回数を超えたメソッド(Hotspot)のみをJITコンパイルする。これにより、JITコンパイルによる無駄なリソースの消費を防いだり、インタプリタ実行時のプロファイリング情報をJITコンパイル利用できる利点がある。HotSpotには用途別に、クライアントVM(コンパイルは高速だが生成されるネイティブコードがあまり最適化されない)と、サーバVM(コンパイルは低速だが生成されるネイティブコードがそこそこ最適化される)がある。

スレッド

  • グリーンスレッド - pthread等、OSが提供するスレッドライブラリを直接使わずJavaで仮想的なスレッドを作り実行する形式。現在はあまり利用されていない。
  • ネイティブスレッド - OSが提供するスレッドライブラリとJavaスレッドが1x1で対応する形式。

GC

  • 世代別GC - ヒープを2つ以上の世代に分割し、それぞれに異なるアルゴリズム(およびデータ構造)を適用する方式。

GCアルゴリズム(データ構造)

  • コピーGC
  • Mark & Sweep
  • Mostly Concurrent Mark & Sweep
  • Mark & Compact

関連項目

  • Kaffe - フリーなJava仮想マシン実装

外部リンク

ウィキブックス
ウィキブックスJava関連の教科書や解説書があります。

ウィキペディア All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアの記事を複製、改変、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。ことなびに掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。



Yahoo!知恵袋


  • Yahooゲームで強制終了してしまうのはなぜですか?別ウィンドウで表示

    Yahooゲームで強制終了してしまうのはなぜですか?最近、Yahooゲーム内のJavaゲームを遊ぼうとするとブラウザを強制終了してしまいますなぜでしょうか?今までは遊べていたのですが…どなたかわかる方いらっしゃいましたら回答お願いいたします。
    解決日時:Sun, 23 Nov 2008 03:04:05 +0900 /  回答数:1 /  スコア:113,251点
  • C++とC#について別ウィンドウで表示

    C++とC#について二つはどのような特徴がありますか?どんな違いがありますか?これからプログラミングを勉強しようと思っているのですが初心者にはどちらが向いていますか?
    解決日時:Thu, 20 Nov 2008 04:02:24 +0900 /  回答数:1 /  スコア:45,934点
  • ゲームしようと思ってテーブルをクリックすると、「同じプロセスで実行中のいくつ....別ウィンドウで表示

    ゲームしようと思ってテーブルをクリックすると、「同じプロセスで実行中のいくつかのjava仮想マシンによってエラーが発生しました」って表示が出てきてゲームがスタートできません。何が原因で、どうすれば復旧できるのでしょうか?
    解決日時:Sun, 21 Sep 2008 03:56:22 +0900 /  回答数:1 /  スコア:165,636点
  • JAVAとWindowsCEについて。プラットフォームを選ばないというJAVAですが、WindowsC...別ウィンドウで表示

    JAVAとWindowsCEについて。プラットフォームを選ばないというJAVAですが、WindowsCEにはどこまで対応しているのでしょうか。開発ソフトC++とVBを提供しているWindowsCEマシンの開発をJAVAで行うとしたら何が必要?
    解決日時:Thu, 28 Aug 2008 03:34:42 +0900 /  回答数:1 /  スコア:149,447点
  • ■JAVAがおかしい・・???別ウィンドウで表示

    ■JAVAがおかしい・・???ヤフーのビリをしようと入ったのですが、「同じプロセスで実行中のいくつかのJava仮想マシンによってエラーが発生しました」と出ます。まったくの意味不明なので教えてくださいほかは何も立ち上げてはいないはずなんですが。。。。
    解決日時:Mon, 25 Aug 2008 03:24:39 +0900 /  回答数:1 /  スコア:171,227点
  • プログラミング言語について別ウィンドウで表示

    プログラミング言語について今学校でCを勉強しています。プログラミング言語にはたくさん種類がありますが、そのうち何個か有名なのを挙げて、それぞれの得意分野や苦手分野などを教えてください。だいたい分かっているような感じですが、まだ詳しく知りません。
    解決日時:Sun, 24 Aug 2008 03:10:45 +0900 /  回答数:2 /  スコア:97,335点



「Java仮想マシン」 検索数の推移 (過去1ヶ月間)

powered by  goo ( NTT Resonant Inc. )


  ↓ニュース  ↓YouTube  ↓テレビ番組  ↓はてブ  ↓ヤフオク
  ↓このページへのリンク

ニュース記事

powered by  Google+ Yahoo!

●... UNIXの世界にTCP/IPとページング仮想記憶をもたらした4.2BSDの開発者であり、Sun Microsystems社の創業者の一人であり、 ... 膨大な開発投資が注ぎ込まれたクラスライブラリ(Java API群)とJava仮想マシン ...別ウィンドウで表示   (2008年11月28日)

●... 今年9月30日に終了する予定だったMicrosoft製Java仮想マシンのサポートが、 ... により、ユーザーがソフトからMicrosoft製のJavaバーチャルマシン(JVM)を削除し、恐らくはMicrosoftの.NETか競合Java ...別ウィンドウで表示   (2008年11月26日)

●... オフコン用に作られたソフトウェアが、現在はワークステーションやPCサーバの仮想マシン環境上で動作しているなどの例も耳にします。 ... Java環境も仮想マシンです。 ... いかにもそこにそのハードウェアがあるように、Java ...別ウィンドウで表示   (2008年11月23日)

●503i用Java仮想マシンの開発はアクセス ... 503iで注目点となるJavaの仮想マシンもアクセスの開発によるものだ。 ... 503iに搭載されるJava仮想マシンは各エディションの中でも相当機能の少ないものだ。 ...別ウィンドウで表示   (2008年11月22日)

●... Javaは、その後、エンタープライズや携帯端末へと多様化が進んだ。 しかし、快進撃のJavaにとっても、未開の地はまだまだある。 ... Java技術を排除する方針を固めており、2004年初頭にはJava仮想マシン ...別ウィンドウで表示   (2008年11月20日)

●日本BEAシステムズは11月12日、Java仮想マシン「BEA WebLogic JRockit 7.0」の提供を開始すると発表した。 ... JRockit 7.0は、インテルベースのプロセッサに最適化したJava仮想マシンで、今回新たに、 ...別ウィンドウで表示   (2008年11月17日)

YouTube

powered by YouTube


※.クリックすると動画が再生されます。

テレビ番組サーチ

powered by Yahoo!TV

はてなブックマーク

powered by Hatena

 PageRank5以上の相互リンク
 ・相互リンクスクエア  (PageRank 5)
 ・相互リンク相互リンク アクセスランキング インプロス  (PageRank 5)
 →便利!NINJA TOOLS
 →FC2検索  用語  Wikipedia  YouTube


スポンサー

powered by  コンテンツマッチ広告のブレイナー


Yahooオークション

powered by Yahoo!

 








デル株式会社 ThinkPad アウトレット Apple Store(Japan) PCDEPOT WEB本店/OZZIO Sony Style(ソニースタイル) シマンテックダウンロードストア マカフィー・ストア

ことなびTOP -  サイトマップ sitemap.xml  -  ことなびとは? -  利用規約

©2007 Kotonavi.com