20130408 javap

Post on 04-Jul-2015

115 views 1 download

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은 무시되어 사용

되지 않습니다.