25
teger Java Virtual Machi エエエエエエエエ エエエ エ エエ

Integer Java Virtual Machine エミュレータ試作

  • Upload
    alayna

  • View
    81

  • Download
    0

Embed Size (px)

DESCRIPTION

Integer Java Virtual Machine エミュレータ試作. 作成者:森 考史. 目次. 1. Java プログラムの実行. 2.研究の目的と結果. 3. IJVM(Integer Java Virtual Machine). 4. JVM について. 5. IJVM エミュレータの概要. 6.まとめ. Java プログラムの実行. Java プログラム. コンパイル. Class ファイル. Java VM. Java VM. Java VM. Java VM. Java VM. Java VM. Free BSD. - PowerPoint PPT Presentation

Citation preview

Page 1: Integer Java Virtual Machine エミュレータ試作

Integer Java Virtual Machineエミュレータ試作

作成者:森 考史

Page 2: Integer Java Virtual Machine エミュレータ試作

目次1. Java プログラムの実行

4. JVM について

3. IJVM(Integer Java Virtual Machine)

5. IJVM エミュレータの概要

6.まとめ

2.研究の目的と結果

Page 3: Integer Java Virtual Machine エミュレータ試作

Javaプログラム

Classファイルコンパイル

x86 SPARC

Java VM Java VMJava VM Java VM Java VM

SolarisLinux FreeBSD

MacOS Windows

Java VM

Solaris

Power PC

Java プログラムの実行

Page 4: Integer Java Virtual Machine エミュレータ試作

・ 命令セットが用意され、命令の実行時に様々な記憶領域の操作が行われる。

JVM (Java Virtual Machine)

Class ファイルCA FE BA BE 00 00 00 2E 2D 0A 00 0D86 A0 07 00 87 1E 0A 00

88 00 20 0A 89 22 0A 00.・・・・・・

・・・・・・

・・・・・・・・・・・・

JVMClass ファイルを読み込み、そこで指定された操作を正しく実行する。

JavaプログラムClass xx { public void xxx { ・・・・   ・・・・   ・・・・ }}

Page 5: Integer Java Virtual Machine エミュレータ試作

目次

2.研究の目的と結果

4. JVM について

3. IJVM(Integer Java Virtual Machine)

5. IJVM エミュレータの概要

6.まとめ

1. Java プログラムの実行

Page 6: Integer Java Virtual Machine エミュレータ試作

様々なアプリケーションにおいて1. JVM の各命令の使用頻度を取り、アプリケーション  の性格によって差異が生まれるかどうかを調査する。

2. JVM の各命令が使用される順序や組み合わせに  規則性がないかを調査する。

JVM の各命令の使用頻度や使用順序を調べることができる JVM のエミュレータを作る

研究の目的と結果

Java の実行環境である JVM(Java Virtual Machine)をコストを少なく効果的に高速化させる

ための材料を探すこと本研究の成果物

JVM のエミュレータを作る足がかりとして、JVM のサブセットであるInteger Java Virtual Machineのエミュレータを作成した。

Page 7: Integer Java Virtual Machine エミュレータ試作

目次

2.研究の目的と結果

4. JVM について

3. IJVM(Integer Java Virtual Machine)

5. IJVM エミュレータの概要

6.まとめ

1. Java プログラムの実行

Page 8: Integer Java Virtual Machine エミュレータ試作

Integer Java Virtual Machine

Java バイトコードの部分集合のためのアセンブラおよびインタープリタから成るもの。

命令 :  20 種類

Page 9: Integer Java Virtual Machine エミュレータ試作

オペコード

ニーモニック 操作内容

0x10 BIPUSH byte_exp byte_exp をオペランド・スタックへとプッシュする

0x59 DUP オペランド・スタックの先頭にある値がコピーされ、オペランド・スタックへとプッシュされる

0xA7 GOTO label 無条件分岐を行う0x60 IADD オペランド・スタックから2つの値をポップ

して、それらの合計をプッシュする

0x7E IAND オペランド・スタックから2つの値をポップして、それらの論理積をプッシュする

0x99 IFEQ label 値をオペランド・スタックからポップし、それが0 なら分岐する

0x9B IFLT label 値をオペランド・スタックからポップし、それが0 未満なら分岐する

0x9F IF_ICMPEQ label 2つの値をオペランド・スタックからポップし、それらが等しいならば分岐する

IJVM の命令セット

Page 10: Integer Java Virtual Machine エミュレータ試作

IJVM の命令セットオペコー

ドニーモニック 操作内容

0x84 IINC varnum_exp,

byte_exp

vamum_exp で示されたローカル変数に、byte_exp を int へ符号拡張したものを加算する

0x15 ILOAD vamum_exp vamum_exp で示されたローカル変数をオペランド スタックへとプッシュする・

0xB6 INVOKEVIRTUAL

method

クラスに基づくディスパッチを行い、インスタンス・メソッドを起動する

0x80 IOR オペランド・スタックから2つの値をポップして、それらの論理和をプッシュする

0xAC IRETURN メソッドから int をリターンする0x36 ISTORE varmum_e

xp値をオペランド スタックからポップし、・それを varmum_exp で示すローカル変数にセットする

0x64 ISUB オペランド・スタックから2つの値をポップして、それらの差をプッシュする

Page 11: Integer Java Virtual Machine エミュレータ試作

オペコード ニーモニック 操作内容

0x13LDC_W constant_exp

constant_exp で示される定数をオペランド ス・タックへとプッシュする

0x00 NOP 何もしない

0x57 POPオペランド・スタックの先頭にある値をポップする

0x5F SWAPオペランド・スタックの先頭にある 2 つの値を交換する

0xC4 WIDE補助バイトを使用したローカル変数インデックスの拡張をする

IJVM の命令セット

Page 12: Integer Java Virtual Machine エミュレータ試作

目次

2.研究の目的と結果

4. JVM について

5. IJVM エミュレータの概要

6.まとめ

3. IJVM (Integer Java Virtual Machine)

(1) Class ファイル

(2) JVM の命令

(3) JVM の構造

1. Java プログラムの実行

Page 13: Integer Java Virtual Machine エミュレータ試作

Class ファイル

CA FE BA BE 00 00 00 2E 002D 0A 00 0D 00 1C 03 00 0186 A0 07 00 1D 09 00 0C 001E 0A 00 0C 00 1F 0A 00 03 00 20 0A 00 0C 00 21 07 0022 0A 00 08 00 1C 0A 00 0800 23 0A 00 08 00 24 07 0025 07 00 26 01 00 0D 63 6F6E 73 74 61 6E 74 5F 70 6F6F 6C 01 00 13 5B 4C 6A 6176 61 2F 6C 61 6E 67 2F 5374 72 69 6E 67 3B 01 00 063C 69 6E 69 74 3E 01 00 0328 29 56 01 00 04 43 6F 6465 01 00 0F 4C 69 6E 65 4

E

あるプログラムのClass ファイルの一部

メジャーバージョン

コンスタントプール

アクセスフラグ

this_class

super_class

インターフェース

フィールド

メソッド

マジックナンバー

マイナーバージョン

属性リスト

Classファイル

Page 14: Integer Java Virtual Machine エミュレータ試作

メソッドの属性の種類 ・ Code 属性 ・ Exceptions 属性 ・ Deprecated 属性 ・ Synthetic 属性

・・・

メソッドの個数(2バイト)

メソッド1

メソッドn

アクセスフラグ(2バイト)メソッド名 CP エントリ番号

(2バイト)ディスクプリタ CP エン

ト番号(2バイト)属性リスト

メソッド1

Class ファイル中のメソッド情報記述部分

JVMの命令が記述されているのは Code属性だけ

Page 15: Integer Java Virtual Machine エミュレータ試作

目次2.研究の目的と結果3. IJVM(Integer Java Virtual Machine)

5. IJVM エミュレータの概要6.まとめ

4. JVM について

(3) JVM の構造

1. Java プログラムの実行

(1) Class ファイル

(2) JVM の命令

Page 16: Integer Java Virtual Machine エミュレータ試作

JVM の命令オペコード : 実行する操作を定義したもの( 1 バイト)オペランド : 操作が用いるデータ(引数)

オペコード オペランドを持たない命令 オペランド

を持つ命令

オペコード

オペランド2

オペランド1

・・・

オペコードは約 200 種類

Java バイトコード :  JVM の命令の集合によって記述されたもの

Page 17: Integer Java Virtual Machine エミュレータ試作

命令 オペコード

オペランド

iload 1 21 01

return B1

Java バイトコードの読み込み例

  

ある Classファイルの Javaバイトコード(16進表記 )

  命令 命令引数

do {    {

}}

オペコードの取得 ;if ( オペランドが必要か? )

オペランドの取得 ;

while ( オペコードが残っているか? ) ;

21 01 B1 iload 01 return

Page 18: Integer Java Virtual Machine エミュレータ試作

目次2.研究の目的と結果3. IJVM(Integer Java Virtual Machine)

5. IJVM エミュレータの概要6.まとめ

4. JVM について

1. Java プログラムの実行

(1) Class ファイル

(2) JVM の命令

(3) JVM の構造

Page 19: Integer Java Virtual Machine エミュレータ試作

JVM の構造 JVMシステム

クラスローダシステム

クラスローダ

ユーザクラスローダ

ユーザクラスローダ

ユーザクラスローダ

ユーザクラスローダ

クラスクラス

クラス

クラスクラス

クラス

クラスクラス

クラス

インスタンスインスタンス

インスタンスインスタンス

インスタンスインスタンスインスタンス

インスタンスインスタンス

スレッド

スレッド

Java スタック

プログラムカウンタ

プログラムカウンタ

フレームオペランド

スタック

ローカル変数

フレームオペランド

スタック

ローカル変数

Java スタック

プログラムカウンタ

プログラムカウンタ

フレームオペランド

スタック

ローカル変数

スレッド

スレッド

CLASSPATH

Class ファイルの取得先

インターネット

データサーバ

メソッドエリア ヒープ

Page 20: Integer Java Virtual Machine エミュレータ試作

Java スタックフレーム 1フレーム 2フレーム 3

スレッド A

ある Java のスレッド(スレッド A とする)が method1というメソッドを実行した場合

先頭のフレームが作業中のフレーム

method1() { method2(); …}

method2() { method3(); …}

Page 21: Integer Java Virtual Machine エミュレータ試作

フレーム

ローカル変数配列 オペランドスタック

this

a

b

0

1

2

a

( 例) method1 のバイトコードのある部分

method1

命令 命令

a

21 01 36 02 istore 2iload 1

Page 22: Integer Java Virtual Machine エミュレータ試作

目次2.研究の目的と結果

3. IJVM(Integer Java Virtual Machine)

5. IJVM エミュレータの概要6.まとめ

4. JVM について

(2) JVM の命令

1. Java プログラムの実行

(1) Class ファイル

(3) JVM の構造

Page 23: Integer Java Virtual Machine エミュレータ試作

Class ファイルを読み込み様々な情報を格納するプログラム

メソッドの情報を受け取り Java バイトコードを実行するプログラム

フレームを可視化するプログラム

保存しておく情報定数フィールドインターフェースメソッド

配列に格納

5. IJVM エミュレータの概要

Page 24: Integer Java Virtual Machine エミュレータ試作

目次1. Java プログラムの実行

3. JVM について

4. IJVM(Integer Java Virtual Machine)

2.研究の目的と結果

5. IJVM エミュレータの概要

6.まとめ

Page 25: Integer Java Virtual Machine エミュレータ試作

6.まとめInteger Java Virtual Machine(命令 20種類)のエミュレータ

この研究で作成したもの

Java Virtual Machine (命令約 200種類)のエミュレータを作成

IJVMには存在しない JVMの命令を作成

JVM の高速化のために、様々なアプリケーションの実行時における JVM の各命令の使用頻度及び使用順序の調査を行う。