17. The Master Plan
javap
Stack Machine
Objects and Methods
Flow Control
18. javap
Java class file disassembler
Used with no options shows class
structure only
Methods, superclass, interfaces, etc
-c – shows the bytecode
-private – shows all classes and members
-s – prints internal types signatures
-l – prints lines numbers and local variable
tables
19. C:workjugclasses>javap Hello -c
Compiled from "Hello.java"
public class Hello extends java.lang.Object{
public Hello();
Code:
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
public static void main(java.lang.String[]);
Code:
0: getstatic #2; //Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3; //String Hello, World!
5: invokevirtual #4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
20. C:workjugclasses>javap Hello -verbose
Compiled from "Hello.java“
public class Hello extends java.lang.Object
SourceFile: "Hello.java"
minor version: 0
major version: 50
Constant pool:
const #1 = Method #6.#20; // java/lang/Object."<init>":()V
const #2 = Field #21.#22; // java/lang/System.out:Ljava/io/PrintStream;
const #3 = String #23; // Hello, World!
const #4 = Method #24.#25; // java/io/PrintStream.println:(Ljava/lang/String;)V
const #5 = class #26; // Hello
const #6 = class #27; // java/lang/Object
const #7 = Asciz <init>;
const #8 = Asciz ()V;
21. C:workjugclasses>javap Hello -verbose
…
public Hello();
Code:
Stack=1, Locals=1, Args_size=1
0: aload_0
1: invokespecial #1; //Method java/lang/Object."<init>":()V
4: return
LineNumberTable:
line 1: 0
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this LHello;
23. Stack Machine
JVM is a stack-based machine
Each thread has a stack
Stack stores frames
Frame is created on method invocation
Frame:
Operand stack
Array of local variables
38. Local Variables
public int calculate(int);
Code:
Stack=2, Locals=2, Args_size=2
…
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this LLocalVariables;
0 5 1 value I
39. Local Variables
public int calculate(int);
Code:
Stack=2, Locals=2, Args_size=2
…
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this LLocalVariables;
0 5 1 value I
40. Local Variables
public int calculate(int);
Code:
Stack=2, Locals=2, Args_size=2
…
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this LLocalVariables;
0 5 1 value I
41. Local Variables
The table
public int calculate(int);
Code:
maps
Stack=2, Locals=2, Args_size=2 numbers to
…
names
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this LLocalVariables;
0 5 1 value I
42. Local Variables
public int calculate(int);
Code:
Stack=2, Locals=2, Args_size=2 Sized explicitly
…
LocalVariableTable:
Start Length Slot Name Signature
0 5 0 this LLocalVariables;
0 5 1 value I
43. Local Variables
Local Variables Stack
var value depth value
ldc "Hello"
0 0
astore_0
1 iconst_1 1
astore_1
2 aload_0 2
3 3
4 4
44. Local Variables
Local Variables Stack
var value depth value
ldc "Hello"
0 0 "Hello"
astore_0
1 iconst_1 1
astore_1
2 aload_0 2
3 3
4 4
45. Local Variables
Local Variables Stack
var value depth value
ldc "Hello"
0 "Hello" 0
astore_0
1 iconst_1 1
astore_1
2 aload_0 2
3 3
4 4
46. Local Variables
Local Variables Stack
var value depth value
ldc "Hello"
0 "Hello" 0 1
astore_0
1 iconst_1 1
astore_1
2 aload_0 2
3 3
4 4
47. Local Variables
Local Variables Stack
var value depth value
ldc "Hello"
0 "Hello" 0
astore_0
1 1 iconst_1 1
astore_1
2 aload_0 2
3 3
4 4
48. Local Variables
Local Variables Stack
var value depth value
ldc "Hello"
0 "Hello" 0 "Hello"
astore_0
1 1 iconst_1 1
astore_1
2 aload_0 2
3 3
4 4