자바 유용 컴 파일 명령

2914 단어 자바jvmC++cC#
클래스 A:
public class Test{
	public static void main(String[] arts){
		byte[] o = new byte[0];
		Object o1 = new Object();
	}
}

컴 파일 명령
javac 의 주요 역할 은 자바 소스 코드 를 해당 하 는 jvm 명령 으로 바 꾸 는 것 입 니 다. 또한 구조 기본 구조 함 수 를 추가 하 는 작업 등 도 도와 줄 것 입 니 다.
http://dreamhead.blogbus.com/logs/5999838.html
1, javac - d < 디 렉 터 리 > A. java
생 성 된 A. class 의 위 치 를 지정 합 니 다.
2,javac -verbose A.java
클래스 파일 을 만 들 때 어떤 종 류 를 불 러 올 지 표시 합 니 다.
역 컴 파일 명령
javap 는 컴 파일 러 가 생 성 한 바이트 코드 와 소스 코드 의 차 이 를 살 펴 보고 자바 컴 파일 러 의 작업 원 리 를 이해 하 는 데 도움 을 줄 수 있 습 니 다.
1, javap A (인자 없 음)
E:\Workspace>javap Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
    public Test();
    public static void main(java.lang.String[]);
}

인쇄 클래스 의 구성원 변수 와 방법 은 클래스 가 다른 클래스 에서 파생 되 지 않 으 면 기본적으로 Object 클래스 에서 계승 합 니 다.표 시 된 구조 함수 가 없 으 면 컴 파일 러 는 부족 한 구조 함 수 를 생 성 합 니 다.
2,javap -c A
E:\Workspace>javap -c  Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
  Code:
   0:   aload_0
   1:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   4:   return

public static void main(java.lang.String[]);
  Code:
   0:   iconst_0
   1:   newarray byte
   3:   astore_1
   4:   new     #2; //class java/lang/Object
   7:   dup
   8:   invokespecial   #1; //Method java/lang/Object."<init>":()V
   11:  astore_2
   12:  return

}

방법의 구체 적 인 바이트 코드 를 보 여 줍 니 다. 예 를 들 어 기본 구조 함수 Test () 는 부모 클래스 Object 의 구조 함 수 를 호출 했 습 니 다.
3,javap -l A
E:\Workspace>javap -l Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
public Test();
  LineNumberTable:
   line 1: 0

public static void main(java.lang.String[]);
  LineNumberTable:
   line 3: 0
   line 4: 4
   line 5: 12

}

바이트 가 표 시 됩 니까? 원본 코드 와 대응 하 는 정 보 를 표시 합 니 다. 예 를 들 어 line 3: 0 은 원본 코드 의 세 번 째 줄 이 바이트 코드 의 0 과 대응 하 는 것 을 표시 합 니 다.   iconst_0, 즉 소스 코드 컴 파일 시 명령 의 시작 위치 입 니 다.
0 길이 의 바이트 배열 대상 을 만 들 려 면 3 개의 조작 명령 을 실행 하고 Object 대상 을 만 들 려 면 7 개의 조작 명령 을 실행 해 야 합 니 다.
4,javap -p A
E:\Workspace>javap -p Test
Compiled from "Test.java"
public class Test extends java.lang.Object{
    public Test();
    public static void main(java.lang.String[]);
}

private 구성원 과 방법 에 대한 정 보 를 추가 로 인쇄 합 니 다.이 종 류 는 private 가 존재 하지 않 기 때문에 인쇄 되 지 않 았 습 니 다.

좋은 웹페이지 즐겨찾기