Java仮想マシン
エンタープライズ用(デスクトップ用を包含)としては、オラクル、IBM、HPなどの各社から実装系がリリースされている。OS上でアプリケーションとして動作する形態が一般的である。
Windowsにも標準でJava仮想マシンが実装されていたが、マイクロソフトがサン・マイクロシステムズとの契約に反して自社仕様の拡張機能を付加したため、Windows XP以降のOSではJavaの技術使用ライセンスを失った。
また、オープンソースコミュニティの手によってIKVM.NETという共通言語ランタイム上で動作するJava仮想マシンの実装も進められている。
変わった試みとしてGNU SmalltalkのVM上で構築されたJava仮想マシンが存在する。
picoJava, Jazelle などJava仮想マシンの命令がハードウェア実装されたプロセッサ、すなわちバイトコードを直接実行可能なプロセッサも存在する。
iload、 lload、 fload、 dload、 aload - 局所変数からint値、 long値、 float値、 double値、 参照値を取り出してスタックに積む。
iload_0、 iload_1、 iload_2、 iload_3 - 0、1、2、3番目の局所変数からint値を取り出してスタックに積む。
lload_0、 lload_1、 lload_2、 lload_3 - 0、1、2、3番目の局所変数からlong値を取り出してスタックに積む。
fload_0、 fload_1、 fload_2、 fload_3 - 0、1、2、3番目の局所変数からfloat値を取り出してスタックに積む。
dload_0、 dload_1、 dload_2、 dload_3 - 0、1、2、3番目の局所変数からdouble値を取り出してスタックに積む。
aload_0、 aload_1、 aload_2、 aload_3 - 0、1、2、3番目の局所変数から参照値を取り出してスタックに積む。
ishl、 lshl - int値、 long値 を指定ビットだけ左にシフトした値をスタックに残す。
ishr、 lshr - int値、 long値 を指定ビットだけ右に算術シフトした値をスタックに残す。負数はシフト後も負に維持される。
iushr、 lushr - int値、 long を指定ビットだけ右に論理シフトした値をスタックに残す。
iand、 land - int値、 long値 の2オペランドのAND(ビットごとの論理積)を求め、スタックに残す。
ior、 lor - int値、 long の2オペランドの OR(ビットごとの論理和)を求め、スタックに残す。
ixor、 lxor - int値、 long の2オペランドのXOR(ビットごとの排他的論理和)を求め、スタックに残す。