Java 코드 컴파일 순서: 먼저 소스 코드가 어휘 분석기에 들어간 다음 토큰 스트림 다음에 구문 분석기에 들어간 다음 추상 구문 트리를 수행한 다음 의미 분석기가 추상 구문 트리에 주석을 달고 바이트코드를 사용합니다. 생성기는 최종적으로 jvm 바이트코드를 생성합니다.
Java 코드 컴파일 순서:
Java 코드 컴파일은 Java 소스 코드 컴파일러에 의해 완료됩니다. 흐름도는 다음과 같습니다.
Java 바이트코드의 실행은 다음과 같습니다. JVM 실행 엔진의 흐름도는 다음과 같습니다.
Java 코드 컴파일 및 실행의 전체 프로세스에는 다음 세 가지 중요한 메커니즘이 포함됩니다. 1) Java 소스 코드 컴파일 메커니즘 2) 클래스 로딩 메커니즘; ) 클래스 실행 메커니즘
그 중 Java 소스 코드 컴파일은 1) 분석 및 심볼 테이블 입력 2) 주석 처리 3) 의미 분석 및 클래스 파일 생성으로 구성됩니다.
최종적으로 생성된 클래스 파일은 다음 부분으로 구성됩니다.
1) 구조 정보. 클래스 파일 형식의 버전 번호와 각 부분의 수와 크기에 대한 정보가 포함됩니다.
2) 메타데이터. Java 소스 코드의 선언 및 상수에 대한 정보에 해당합니다. 클래스 선언 정보, 상속된 슈퍼클래스, 구현된 인터페이스, 도메인 및 메서드 선언 정보, 상수 풀이 포함되어 있습니다.
3) 메소드 정보. Java 소스 코드의 명령문 및 표현식에 해당하는 정보에 해당합니다. 바이트코드, 예외 처리기 테이블, 평가 스택 및 로컬 변수 영역 크기, 평가 스택 유형 레코드 및 디버깅 기호 정보를 포함합니다.
클래스 로딩 메커니즘JVM 클래스 로딩은 ClassLoader와 그 하위 클래스를 통해 완료됩니다. 클래스의 계층적 관계와 로딩 순서는 아래 그림과 같습니다.
1) BootStrap ClassLoader
가 담당합니다. loading $ JAVA_HOME의 jre/lib/rt.jar 패키지에 있는 모든 클래스는 C++로 구현되며 ClassLoader 하위 클래스가 아닙니다
2) 확장 ClassLoader
는 jre를 포함하여 Java 플랫폼의 확장 기능이 있는 일부 jar 패키지를 로드하는 일을 담당합니다. $JAVA_HOME의 /lib /*.jar 또는 -Djava.ext.dirs가 지정한 디렉토리의 jar 패키지.
3) App ClassLoader
는 클래스 경로에 지정된 jar 패키지와 디렉토리의 클래스를 기록하는 역할을 담당합니다.
4) Custom ClassLoader
는 Tomcat과 같은 애플리케이션에서 사용자 정의한 ClassLoader입니다. 그리고 jboss는 j2ee 사양에 따라 ClassLoader를 구현합니다.
로딩 과정에서 먼저 클래스가 로드되었는지 확인합니다. 확인 순서는 아래에서 위로, Custom ClassLoader에서 BootStrap입니다. ClassLoader는 특정 클래스 로더가 로드되는 동안 해당 클래스가 로드된 것으로 간주되어 이 클래스가 한 번만 로드되는지 확인합니다. 로딩 순서는 위에서 아래로 입니다.
클래스 실행 메커니즘JVM은 클래스 바이트코드를 실행하는 스택 아키텍처를 기반으로 합니다. 스레드가 생성된 후 프로그램 카운터(PC)와 스택(Stack)이 생성됩니다. 프로그램 카운터는 다음에 실행할 명령을 저장합니다. 각 스택 프레임은 각 메서드의 각 호출에 해당합니다. 스택 프레임은 로컬 변수 영역과 피연산자 스택의 두 부분으로 구성됩니다. 메서드 및 매개 변수와 함께 피연산자 스택은 메서드 실행 중에 생성된 중간 결과를 저장하는 데 사용됩니다. 스택의 구조는 다음과 같습니다:
관련 무료 학습 권장 사항:
위 내용은 자바 코드의 컴파일 순서는 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!