클래스 JVM 에서 의 실행 과정
2215 단어 자바
1.로 딩
JVM 은 자바 류 의 바 이 너 리 형식 을 메모리 에 불 러 오고 그 를 메모리 에 캐 시 하여 나중에 사용 할 수 있 도록 합 니 다.지정 한 클래스 를 찾 지 못 하면 이상 classNotFound 를 던 져 프로 세 스 가 여기에서 끝 납 니 다.오류 없 이 자바 더미 에 이 종 류 를 대표 하 는 자바.lang.Class 대상 을 계속 생 성하 여 방법 영역 데이터 의 접근 입 구 를 만 듭 니 다.
2.링크
이 단계 에서 세 가지 일 을 합 니 다:검증,준비,해석(선택 가능).검증 은 JVM 이 자바 언어 와 JVM 의 의미 에 따라 이 바 이 너 리 형식 을 검사 하 는 것 입 니 다.예 를 들 어 컴 파일 된 클래스 파일 을 변경 하면 이 클래스 파일 을 사용 할 수 없 을 수도 있 습 니 다.준비 란 실행 할 지정 한 클래스 를 말 합 니 다.준비 단 계 는 변수 에 메모 리 를 할당 하고 정적 변 수 를 초기 화 하 는 것 입 니 다.이 단계 에서 분 배 된 클래스 변수(static 수식 변수)는 클래스 의 인 스 턴 스 변 수 를 포함 하지 않 습 니 다.final 이 아 닌 변수 에 대해 JVM 은 할당 문장의 값 이 아 닌'0 값'으로 설정 합 니 다.예 를 들 어
public static int num = 8;
그러면 이 단계 에서 num 의 값 은 8 이 아니 라 0 입 니 다. final 수식 클래스 변 수 는 실제 값 으로 대 입 됩 니 다.해석 은 지정 한 클래스 가 다른 클래스/인 터 페 이 스 를 인 용 했 는 지,다른 클래스/인 터 페 이 스 를 찾 고 불 러 올 수 있 는 지 확인 하 는 것 입 니 다.이 검 사 는 인 용 된 클래스/인 터 페 이 스 를 재 귀적 으로 진행 되 며,JVM 의 실 시 는 다음 단계 에서 분석 을 수행 할 수 있 습 니 다.즉,실행 중인 코드 가 인 용 된 클래스/인 터 페 이 스 를 진정 으로 사용 할 때 입 니 다.
예 를 들 어 지정 한 클래스 는 다음 코드 를 포함 합 니 다.
MathUtil.add(2,1);
그러면 정적 add 방법 을 호출 하기 전에 JVM 은 MathUtil 류 를 불 러 오고 링크 하 며 초기 화 합 니 다.
3.초기 화
마지막 단계 에서 JVM 은 정적 변 수 를 할당 하거나 부족 한 값 으로 초기 화 합 니 다.main 방법 을 실행 하기 전에 초기 화 합 니 다.지정 한 클래스 가 초기 화 되 기 전에 부모 클래스 를 초기 화 합 니 다.또한 부모 클래스 를 초기 화 할 때 부모 클래스 의 부모 클래스 도 이렇게 초기 화 합 니 다.이 과정 은 재 귀적 으로 진행 되 었 다.
public class StaticInitTest {
public static int a=5;
public static int b=a*2;
static{
System.out.println("Static");
System.out.println(b);
}
public static void main(String[] args) {
System.out.println("main method");
}
}
실행 후 출력:Static
10 //main 방법 을 실행 하기 전에 정적 변 수 를 초기 화하 고 정적 초기 화 프로그램 을 실행 합 니 다.
main method //그리고 main 방법 을 실행 합 니 다.
마지막 으로 사용 하고 마 운 트 해제 하 는 것 은 말 할 것 도 없고 사용 과정 은 프로그램 이 정의 한 행동 에 따라 실행 되 며 마 운 트 해 제 는 GC 에서 이 루어 집 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.