20130408 javap

9
Java static Main javap

Transcript of 20130408 javap

Page 1: 20130408 javap

Java static Main

javap

Page 2: 20130408 javap

jdk technical stack diagram

javap

Page 3: 20130408 javap

흔한 인사 코드

• public class T1

• {

• public static void main(String[] args)

• {

• System.out.println("Hello World!");

• }

• }

Page 4: 20130408 javap

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

}

Page 5: 20130408 javap

모든 객체는 Object상속

• Object를 통한 초기화

invokespecial <init>()v

http://cs.au.dk/~mis/dOvs/jvmspec/ref--

33.html

Page 6: 20130408 javap

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 없으면 에러.

Page 7: 20130408 javap

ldc

• ldc는 상수값을 로드하여 operand stack에

넣는 것을 의미합니다.

http://cs.au.dk/~mis/dOvs/jvmspec/ref-

_ldc.html

Page 8: 20130408 javap

invokevirtual

인스턴스 메소드를 호출하기 위한 지시자입

니다.

여기에서는 println을 쓰기 위해서 사용됩니

다.(Hello World 출력)

사실 println의 아규먼트는 Value, Type

입니다만 뒤에 String type은 무시되어 사용

되지 않습니다.

Page 9: 20130408 javap