20130408 javap

330 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
330
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

20130408 javap

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

×