20130408 javap
-
Upload
sukjin-yun -
Category
Documents
-
view
115 -
download
1
Transcript of 20130408 javap
Java static Main
javap
jdk technical stack diagram
javap
흔한 인사 코드
• public class T1
• {
• public static void main(String[] args)
• {
• System.out.println("Hello World!");
• }
• }
javap로 디컴파일
javap –c T1
Compiled from "T1.java“
public class T1 {
public T1();
Code:
0: aload_0
1: invokespecial #1 ()V // Method java/lang/Object."<init>":
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.printl
n:(Ljava/lang/String;)V
8: return
}
모든 객체는 Object상속
• Object를 통한 초기화
invokespecial <init>()v
http://cs.au.dk/~mis/dOvs/jvmspec/ref--
33.html
Main메소드처리#1
0 getstatic
앞에 0은 메소드의 offset을 나타내고 getstatic은데이터를 Operand stack에 밀어놓도록 알려줌
http://stuff.mit.edu/afs/sipb/user/marc/hotjava/doc/vmspec/vmspec_9.html
c++ 처럼 executable한 실행파일을 만드는 것이아니기 때문에 main 메소드 시그니처 자체가static
static 없으면 에러.
ldc
• ldc는 상수값을 로드하여 operand stack에
넣는 것을 의미합니다.
http://cs.au.dk/~mis/dOvs/jvmspec/ref-
_ldc.html
invokevirtual
인스턴스 메소드를 호출하기 위한 지시자입
니다.
여기에서는 println을 쓰기 위해서 사용됩니
다.(Hello World 출력)
사실 println의 아규먼트는 Value, Type
입니다만 뒤에 String type은 무시되어 사용
되지 않습니다.