9 888 Java Just-in-Time OpenJIT 11 1
1 1 1.1 : : : : : : : : : : : : : : : : : : : : 1 1.2 : : : : : : : : : : : : : : : : : : : : : : : : 2 1.3 : : : : : : : : : : : : : : : : : : : : : : : : 6 1.4 : : : : : : : : : : : : : : : : : : : : : : : : : : : : 7 2 10 2.1 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 10 2.2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : 13 3 15 4 25 5 28 5.1 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 28 5.1.1 OpenJIT : : : : : : : : : : : : : : 29 5.1.2 OpenJIT : : : : : : : : : : : : : : : 30 5.2 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 31 5.3 : : : : : : : : : : : : : : : : : : : : : : 33 6 OpenJIT 34 6.1 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 34 6.2 : : : : : : : : : : : : : : 36 6.3 OpenJIT : : : : : : : : : : : : : : : : : : : : 38 6.3.1 OpenJIT : : : : : : : : : : : : : : : : : : : : : : 40 i
6.3.2 OpenJIT : : : : : : : : 41 6.3.3 OpenJIT JNI API : : : : : : : : : : : : : : : : : : 42 6.4 OpenJIT : : : : : : : : : : : 43 6.4.1 : : : : : : : : : : : : : : : : : : : : : 45 6.4.2 : : : : : : : : : : : : : : : : : : 46 6.4.3 AST : : : : : : : : : : : : : : : : : : : : : : : : : : 47 6.5 OpenJIT : : : : : : : : : 48 6.5.1 : : : : : : : : : : : : : : : : : : : : 50 6.5.2 : : : : : : : : : : : : : : : : : : : : 51 6.5.3 : : : : : : : : : : : : : : : : : : : : : : : 52 6.6 OpenJIT : : : : : : : : : : : : : : : : : : : : : : : : : 53 6.6.1 : : : : : : : : : : : : : : : : : : : : : : : : : 55 6.6.2 : : : : : : : : : : : : : : : : : : : : : 56 6.7 OpenJIT : : : : : : : : : : : : : : : : : : : 57 6.7.1 AST : : : : : : : : : : : : : : : : : : : : : : : : : 59 6.7.2 : : : : : : : : : : : : : : : : : : 60 6.7.3 : : : : : : : : : : : : : : : 61 6.7.4 : : : : : : : : : : : : : : : : : : : : : : : 62 6.8 OpenJIT : : : : : : : : : : : : : : : : : : : 63 6.8.1 : : : : : : : : : : : : : : : : : : : 65 6.8.2 : : : : : : : : : : : : : : : : : : : : : 66 6.8.3 : : : : : : : : : : : : : : : : : : : : : : : : : 67 6.8.4 : : : : : : : : : : : : : : : : : : : : : : : 68 6.9 OpenJIT : : : : : : : : : : : : : : : : : : : : 69 6.9.1 AST : : : : : : : : : : : : : : : : : : : : 71 6.9.2 AST : : : : : : : : : : : : : : : : : : : : 72 6.9.3 AST : : : : : : : : : : : : : : : : : : : : : : : : : : 73 7 OpenJIT 74 7.1 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 74 7.2 : : : : : : : : : : : : : : 76 7.3 OpenJIT : : : : : : : : : : : : : : : : 78 ii
7.3.1 : : : : : : : : : : : : : : : : : : : : 80 7.3.2 : : : : : : : : : : : : : : : : : : : : : : : : : 81 7.3.3 : : : : : : : : : : : : : : : : : : : : 82 7.3.4 : : : : : : : : : : : : : : : : : : : : 83 7.4 OpenJIT : : : : : : : : : : : : : : : : : : : : 84 7.4.1 : : : : : : : : : : : : : : : : : : : : : : : : : 86 7.4.2 : : : : : : : : : : : : : : : : : : : : : : : 87 7.4.3 : : : : : : : : : : : : : : : : : : : 88 7.5 OpenJIT RTL : : : : : : : : : : : : : : : : : : : : : : : 89 7.5.1 : : : : : : : : : : : : : : : : : : : : : : : 91 7.5.2 : : : : : : : : : : : : : : : : : : : 92 7.6 OpenJIT Peephole : : : : : : : : : : : : : : : : : : : : 93 7.6.1 : : : : : : : : : : : : : : : : : : : : : : : 95 7.6.2 Peephole : : : : : : : : : : : : : : : : : : : : : 96 7.7 OpenJIT : : : : : : : : : : : : : : : : : : : : : 97 7.7.1 : : : : : : : : : : : : : : : : : : : : : : : 99 7.7.2 : : : : : : : : : : : : : : : : : : : : : : : 100 7.7.3 : : : : : : : : : : : : : : : : : : : : : : : : : 101 7.8 OpenJIT SPARC : : : : : : : : 102 7.9 OpenJIT : : : : : : : : : : : : : : : : : : : 103 8 104 8.1 OpenJIT : : : : : : : : : : : : : : : : : 104 8.1.1 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 104 8.1.2 : : : : : : : : : : : : : : : : : : : : : : : 105 8.2 OpenJIT : : : : : : : : : : : : : : : : : : : 119 8.2.1 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 119 8.2.2 : : : : : : : : : : : : : : : : : : : : : : : 120 9 130 9.1 : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : : 130 9.2 : : : : : : : : : : : : : : : : : : : : : : : : : : : 131 iii
9.3 : : : : : : : : : : : : : : : : : : : : : : : : 132 133 iv
1.1 OpenJIT : : : : : : : : : : : : : : : : : : : : : : : : : : 9 2.1 JIT OpenJIT : : : : 12 2.2 OpenJIT : : : : : : : : : : : 14 3.1 OpenJIT : : : : : : : : : : : : : : : : : : 19 3.2 OpenJIT : : : : : : : : : : : : : : : : : : : 20 3.3 OpenJIT : : : : : : : 22 5.1 OpenJIT : : : : : : : : : : : : : : 32 6.1 OpenJIT : : : : : : : : : : : : : : : : : : 37 6.2 OpenJIT : : : : : : : : : : : : : : : : : : : : 39 6.3 OpenJIT : : : : : : : : : : : 44 6.4 OpenJIT : : : : : : : : : 49 6.5 OpenJIT : : : : : : : : : : : : : : : : : : : : : : : : : 54 6.6 OpenJIT : : : : : : : : : : : : : : : : : : : 58 6.7 OpenJIT : : : : : : : : : : : : : : : : : : : 64 6.8 OpenJIT : : : : : : : : : : : : : : : : : : : : 70 7.1 OpenJIT : : : : : : : : : : : : : : : : : : : 77 7.2 OpenJIT : : : : : : : : : : : : : : : : 79 7.3 OpenJIT : : : : : : : : : : : : : : : : : : : : 85 7.4 OpenJIT RTL : : : : : : : : : : : : : : : : : : : : : : : 90 7.5 OpenJIT Peephole : : : : : : : : : : : : : : : : : : : : 94 7.6 OpenJIT : : : : : : : : : : : : : : : : : : : : : 98 v
8.1 OpenJIT : : : : : : : : : : : : : : : : : : : : 106 8.2 OpenJIT : : : : : : : : : : : 108 8.3 OpenJIT : : : : : : : : : 110 8.4 OpenJIT : : : : : : : : : : : : : : : : : : : : : : : : : 112 8.5 OpenJIT : : : : : : : : : : : : : : : : : : : 114 8.6 OpenJIT : : : : : : : : : : : : : : : : : : : 116 8.7 OpenJIT : : : : : : : : : : : : : : : : : : : : 118 8.8 OpenJIT : : : : : : : : : : : : : : : : 121 8.9 OpenJIT : : : : : : : : : : : : : : : : : : : : 123 8.10 OpenJIT RTL : : : : : : : : : : : : : : : : : : : : : : : 125 8.11 OpenJIT Peephole : : : : : : : : : : : : : : : : : : : : 127 8.12 OpenJIT : : : : : : : : : : : : : : : : : : : : : 129 vi
1 1.1 NC Java Java Just-In-Time (JIT) JIT \Resource-Ecient"( ) (1) (2) JIT (1) (2) Java 1
1.2 OpenJIT Java JIT (API ) JIT 2
(1) JIT JIT Lisp Smalltalk Lisp, Smalltalk, Java (Java ) Java javac (Java Java Virtual Machine - JVM ) Just- In-Time(JIT) JIT amortization( ) Java JDK JIT JVM API JIT JIT JIT JIT JIT API OpenJIT JDK API 3
(2) OpenJIT OpenJIT Open Compiler ( ) 1982 Indiana ( MIT) Brian Smith 3-Lisp Open Compiler Java JIT JVM(Java Virtual Machine) JVM Intel 486 RISC 30 JVM JVM VM JVM 4
peephole JIT C Open Compiler JIT Open Compiler OpenJIT Java Java HBC(High performance Bytecode Compiler) C Fortran Java HBC OpenJIT 5
1.3 ( ) \Open Compiler"( ) JIT \OpenJIT" Java 6
1.4 Open Compiler ( Reection) Just-In-Time Open Compiler OpenJIT OpenJIT JIT JIT OpenJIT Java OpenJIT OpenJIT Java OpenJIT Java VM ( ) OpenJIT 7
1.1 OpenJIT 8
Java Java OpenJIT JIT 1.1: OpenJIT 9
2 2.1 (1) ( ) \Open Compiler"( ) JIT \OpenJIT" Java (2) OpenJIT JIT JDK 1.1.4 JIT JDK 1.1.4 JavaVM JIT OpenJIT 10
OpenJIT Java JavaVM Open- JIT (3) OpenJIT JIT 2.1 11
Just-In-Time JIT OpenJIT OO JIT 2.1: JIT OpenJIT 12
2.2 (1) ( ) \Open Compiler"( ) JIT \OpenJIT" (2) Open Compiler API Java ( ) OpenJIT OpenJIT (AST) JIT peephole (3) OpenJIT 2.2 OpenJIT OpenJIT 13
Java Java javac Java OpenJIT OpenJIT JavaVM Java OpenJIT RTL OpenJIT 2.2: OpenJIT 14
3 (1) OpenJIT OpenJIT OpenJIT OpenJIT Java OpenJIT OpenJIT Open- JIT OpenJIT AST OpenJIT AST AST OpenJIT OpenJIT OpenJIT OpenJIT OpenJIT 15
OpenJIT OpenJIT OpenJIT OpenJIT OpenJIT RTL (RTL) OpenJIT Peephole RTL RTL OpenJIT SPARC SPARC OpenJIT SPARC OpenJIT JavaVM OpenJIT OpenJIT Java Java Virtual Machine JIT API OpenJIT ( 3.1,3.2 ) OpenJIT 1. OpenJIT OpenJIT 2. OpenJIT Java discompiler 16
3. OpenJIT (AST) OpenJIT 4. OpenJIT 5. OpenJIT AST 6. OpenJIT 7. OpenJIT OpenJIT OpenJIT 1. OpenJIT OpenJIT 2. OpenJIT 3. OpenJIT RTL RTL 4. OpenJIT Peephole RTL 5. OpenJIT 17
6. OpenJIT SPARC RTL 7. OpenJIT : 13, 14 18
OpenJIT OpenJIT Java OpenJIT OpenJIT JavaVM OpenJIT OpenJIT OpenJIT OpenJIT Java OpenJIT 3.1: OpenJIT 19
Java OpenJIT OpenJIT OpenJIT OpenJIT RTL RTL OpenJIT Peephole RTL OpenJIT OpenJIT SPARC SPARC OpenJIT OpenJIT JavaVM Java OpenVM OpenJIT 3.2: OpenJIT 20
(2) 3.3 21
Java Java javac Java OpenJIT OpenJIT JavaVM Java OpenJIT RTL OpenJIT 3.3: OpenJIT 22
(3) Open Compiler Java Java 23
(4) 24
4 (1) : Sun Ultra 60 (UltraSPARC-II22) : 256MB : 4GB 25
(2) : OS: Sun Solaris 2.6 Java : JDK 1.1.6 26
(3) JDK JDK JIT API API OpenJIT JDK JIT JDK JIT OpenJIT OpenJIT native method abstract method (invoker) invoker Invoker OpenJIT OpenJIT OpenJIT invoker JDK OpenJIT invoker 27
5 5.1 OpenJIT OpenJIT 28
5.1.1 OpenJIT OpenJIT Java OpenJIT OpenJIT OpenJIT AST OpenJIT AST AST OpenJIT OpenJIT OpenJIT OpenJIT 29
5.1.2 OpenJIT OpenJIT OpenJIT OpenJIT OpenJIT OpenJIT OpenJIT RTL (RTL) OpenJIT Peephole RTL RTL OpenJIT SPARC SPARC OpenJIT SPARC OpenJIT JavaVM OpenJIT 30
5.2 5.1 31
Java Java javac Java OpenJIT OpenJIT JavaVM Java OpenJIT RTL OpenJIT 5.1: OpenJIT 32
5.3 5.1 33
6 OpenJIT 6.1 OpenJIT Java OpenJIT OpenJIT OpenJIT AST OpenJIT AST AST OpenJIT 34
OpenJIT OpenJIT OpenJIT 35
6.2 OpenJIT 6.1 36
7.3 OpenJIT 6.3 OpenJIT Java 6.4 OpenJIT 6.5 OpenJIT JavaVM 6.7 OpenJIT 6.6 OpenJIT 6.8 OpenJIT 6.9 OpenJIT Java OpenJIT 6.1: OpenJIT 37
6.3 OpenJIT (1) OpenJIT Sun JDK Java Native Code API(Application Programmer's Interface) API JVM OpenJIT API JDK VM OpenJIT JIT JVM (2) OpenJIT 6.2 (3) (4) (5) (6) 38
OpenJIT 6.4-6.9 OpenJIT 7.3-7.9 OpenJIT OpenJIT OpenJITJNI API 6.2: OpenJIT 39
6.3.1 OpenJIT (1) OpenJIT OpenJIT OpenJIT OpenJIT (2) 6.2 (3) (4) (5) (6) 40
6.3.2 OpenJIT (1) OpenJIT OpenJIT OpenJIT OpenJIT (2) 6.2 (3) (4) (5) (6) 41
6.3.3 OpenJIT JNI API (1) OpenJIT JNI (Java Native Interface) API JavaVM JIT JDK API OpenJIT JIT (2) 6.2 (3) (4) (5) (6) 42
6.4 OpenJIT (1) OpenJIT Java discompiler AST() OpenJIT (2) OpenJIT 6.3 (3) (4) AST (5) (6) 43
AST AST 6.3: OpenJIT 44
6.4.1 (1) AST (VMInstruction ) AST (2) 6.3 (3) (4) (5) (6) 45
6.4.2 (1) (VMInstruction ) (2) 6.3 (3) (4) (5) (6) 46
6.4.3 AST (1) (VMInstruction ) Java AST (2) 6.3 (3) (4) AST (5) (6) 47
6.5 OpenJIT (1) OpenJIT OpenJIT (AST) OpenJIT (2) OpenJIT 6.4 (3), AST (4) AST (5) (6) 48
AST AST 6.4: OpenJIT 49
6.5.1 (1) AST (2) 6.4 (3) AST (4) (5) (6) 50
6.5.2 (1) AST AST (2) 6.4 (3) (4) AST (5) (6) 51
6.5.3 (1) AST (2) 6.4 (3) (4) (5) (6) 52
6.6 OpenJIT (1) OpenJIT OpenJIT OpenJIT OpenJIT OpenJIT (2) OpenJIT 6.5 (3) () AST (4) (5) (6) 53
AST OpenJIT OpenJIT OpenJIT 6.5: OpenJIT 54
6.6.1 (1) OpenJIT OpenJIT OpenJIT AST (2) 6.5 (3) (4) (5) (6) 55
6.6.2 (1) OpenJIT AST OpenJIT (2) 6.5 (3) (4) (5) (6) 56
6.7 OpenJIT (1) OpenJIT AST (2) OpenJIT 6.6 (3) AST (4) (5) (6) 57
AST AST 6.6: OpenJIT 58
6.7.1 AST (1) AST (2) 6.6 (3) AST (4) (5) (6) 59
6.7.2 (1) AST AST (2) 6.6 (3) (4) (5) (6) 60
6.7.3 (1) AST AST AST (2) 6.6 (3) (4) (5) (6) 61
6.7.4 (1) AST AST AST (2) 6.6 (3) (4) (5) (6) 62
6.8 OpenJIT (1) OpenJIT OpenJIT (2) OpenJIT 6.7 (3) (4) (5) (6) 63
6.7: OpenJIT 64
6.8.1 (1) (2) 6.7 (3) (4) (5) (6) 65
6.8.2 (1) (2) 6.7 (3) (4) (5) (6) 66
6.8.3 (1) (2) 6.7 (3) (4) (5) (6) 67
6.8.4 (1) (2) 6.7 (3) (4) (5) (6) 68
6.9 OpenJIT (1) OpenJIT OpenJIT AST AST Java OpenJIT (2) OpenJIT 6.8 (3) AST (4) AST (5) (6) 69
AST AST AST AST AST 6.8: OpenJIT 70
6.9.1 AST (1) AST AST AST AST (2) 6.8 (3) (4) (5) (6) 71
6.9.2 AST (1) AST AST AST (2) 6.8 (3) AST (4) (5) (6) 72
6.9.3 AST (1) AST AST (2) 6.8 (3) (4) AST (5) (6) 73
7 OpenJIT 7.1 OpenJIT OpenJIT OpenJIT OpenJIT OpenJIT OpenJIT RTL (RTL) OpenJIT Peephole RTL RTL OpenJIT SPARC SPARC OpenJIT SPARC OpenJIT 74
JavaVM OpenJIT 75
7.2 OpenJIT 7.1 76
Java 7.4 OpenJIT 6.3 OpenJIT 7.3 OpenJIT 7.5 OpenJIT RTL RTL 7.6 OpenJIT Peephole RTL 7.7 OpenJIT 7.8 OpenJIT SPARC SPARC 7.9 OpenJIT OpenJIT JavaVM Java OpenVM OpenJIT 7.1: OpenJIT 77
7.3 OpenJIT (1) Java (2) OpenJIT 7.2 (3) (4) SPARC (5) (6) 78
OpenJIT OpenJIT RTL OpenJIT Peephole 7.2: OpenJIT 79
7.3.1 (1) SPARC OpenJIT OpenJIT RTL OpenJIT Peephole (2) 7.2 (3) (4) SPARC (5) (6) 80
7.3.2 (1) JDK Java constant pool constant pool (2) 7.2 (3) (4) (5) (6) 81
7.3.3 (1) JDK (2) 7.2 (3) (4) (5) (6) 82
7.3.4 (1) (2) 7.2 (3) (4) (5) (6) 83
7.4 OpenJIT (1) Java (2) OpenJIT 7.3 (3) (4) (5) (6) 84
7.3: OpenJIT 85
7.4.1 (1) constant pool constant pool (2) 7.3 (3) (4) (5) (6) 86
7.4.2 (1) constant pool signature Java (2) 7.3 (3) (4) (5) (6) 87
7.4.3 (1) boolean long oat double (2) 7.3 (3) (4) (5) (6) 88
7.5 OpenJIT RTL (1) OpenJIT RTL(Register Transfer Language) OpenJIT RTL (2) OpenJIT RTL 7.4 (3) (4) RTL (5) (6) 89
RTL 7.4: OpenJIT RTL 90
7.5.1 (1) (2) 7.4 (3) (4) (5) (6) 91
7.5.2 (1) Java RTL (2) 7.4 (3) (4) RTL (5) (6) 92
7.6 OpenJIT Peephole (1) OpenJIT RTL RTL RTL Peephole Peephole redundant load/store elimination Java Peephole Java RTL (2) OpenJIT Peephole 7.5 (3) RTL (4) RTL (5) (6) 93
RTL Peephole RTL 7.5: OpenJIT Peephole 94
7.6.1 (1) RTL (2) 7.5 (3) (4) (5) (6) 95
7.6.2 Peephole (1) RTL Peephole constant folding (2) 7.5 (3) RTL (4) RTL (5) (6) 96
7.7 OpenJIT (1) / (2) OpenJIT 7.6 (3) (4) / (5) (6) 97
7.6: OpenJIT 98
7.7.1 (1) (2) 7.6 (3) (4) (5) (6) 99
7.7.2 (1) (2) 7.6 (3) (4) (5) (6) 100
7.7.3 (1) (2) 7.6 (3) (4) / (5) (6) 101
7.8 OpenJIT SPARC ( : ) 102
7.9 OpenJIT ( : ) 103
8 8.1 OpenJIT 8.1.1 OpenJIT 104
8.1.2 (1) OpenJIT OpenJIT 8.1 105
(1-C1) OpenJIT OpenJIT OpenJIT (1-C4) (1-C3) (1-C2) OpenJIT OpenJITJNI API 8.1: OpenJIT 106
(2) OpenJIT OpenJIT 8.2 (2-D1) (2-D2) (2-D3) AST AST 107
(2-D1) (2-C1) (2-C2) AST AST (2-D3) (2-D2) 8.2: OpenJIT 108
(3) OpenJIT OpenJIT 8.3 (3-D1) (3-D2) AST OpenJIT (AST) (3-D3) AST (2-D3) AST 109
(3-D1) AST (3-D2) (3-C2) (3-C1) AST (3-D3) 8.3: OpenJIT 110
(4) OpenJIT OpenJIT 8.4 (4-D1) OpenJIT AST (7-D3) 111
AST (4-C1) (4-C4) OpenJIT (4-C2) (4-C3) OpenJIT (4-C5) OpenJIT (4-D1) 8.4: OpenJIT 112
(5) OpenJIT OpenJIT 8.5 (5-D1) AST OpenJIT (2-D3) AST OpenJIT (3-D3) (5-D2) OpenJIT (2-D2) (5-D3) a priori (5-D4) (5-D5) AST AST (5-D6) AST 113
AST (5-D1) (5-D2) (5-D3) AST (5-C2) (5-C3) (5-D4) (5-C1) (5-D5) (5-D6) 8.5: OpenJIT 114
(6) OpenJIT OpenJIT 8.6 (6-D1) OpenJIT (2-D2) (6-D2) OpenJIT (5-D5) (6-D3) OpenJIT (5-D4) (6-D4) OpenJIT (5-D6) (6-D5) 115
(6-D2) (6-D1) (6-D3) (6-D4) (6-C2) (6-C1) (6-C3) (6-C4) (6-D5) 8.6: OpenJIT 116
(7) OpenJIT OpenJIT 8.7 (7-D1) AST OpenJIT (2-D3) AST OpenJIT (3-D3) (7-D2) OpenJIT (7-D3) AST AST AST 117
AST (7-D1) (7-D2) AST (7-C2) (7-C1) AST AST AST (7-D3) 8.7: OpenJIT 118
8.2 OpenJIT 8.2.1 OpenJIT 119
8.2.2 (1) OpenJIT OpenJIT 8.8 (8-D1) OpenJIT (8-D2) SPARC SPARC 120
OpenJIT (8-C1) (8-D1) (8-C4) OpenJIT RTL (8-C2) OpenJIT Peephole (8-C3) (8-D2) (8-C6) (8-C5) 8.8: OpenJIT 121
(2) OpenJIT OpenJIT 8.9 (9-D1) OpenJIT (9-D2) 122
(9-D1) (9-D2) (9-C1) (9-C2) 8.9: OpenJIT 123
(3) OpenJIT RTL OpenJIT RTL 8.10 (10-D1) OpenJIT (9-D2) (10-D2) (10-D3) RTL RTL 124
(10-D1) (10-D2) RTL (10-D3) 8.10: OpenJIT RTL 125
(4) OpenJIT Peephole OpenJIT Peephole 8.11 (11-D1) OpenJIT RTL (10-D2) (11-D2) RTL OpenJIT RTL RTL(10-D3) (11-D3) RTL Peephole RTL RTL 126
(11-D1) RTL (11-D2) Peephole (11-C1) RTL (11-D3) 8.11: OpenJIT Peephole 127
(5) OpenJIT OpenJIT 8.12 (12-D1) RTL (12-D2) / / (12-D3) 128
(12-D1) (12-C1) (12-C2) (12-D2) (12-D3) 8.12: OpenJIT 129
9 9.1 Java Class 130
9.2 Java Class The Java Virtual Machine Specication[1] 131
9.3 132
[1] Sun Microsystems, Inc. \The Java Virtual Machine Specication", 1996. 133