자바 가상 머신은 자바 바이트 코드를 실행하는 방법은?

표준 JDK 핫스팟 가상 머신에서, 예를 들어, 자바 가상 머신이 가상 머신과 기본 하드웨어 관점에서 자바 바이트 코드를 실행하는 방법, 특히이다.

 

가상 머신의 관점

보기의 가상 머신 포인트의 관점에서, 자바 코드의 구현은 먼저 자바 가상 머신에서 컴파일 된 클래스 파일에로드해야합니다.

로딩 후, 자바 클래스의 메소드 영역 (방법 지역)에 저장된다. 실제 작동 가상 머신 코드 실행 메소드 영역.

동작에서, 자바 메소드에 대한 호출은, Java 가상 머신의 로컬 변수 및 오퍼랜드의 바이트 코드를 저장하는 스택의 현재 자바 스레드 스택 프레임 방식을 생성 할 때마다.

스택 프레임의 사이즈는 사전에 계산되고, Java 가상 머신은 연속 공간 분포 스택 프레임 메모리를 필요로하지 않는다. 

이 방법은 현재 실행하면 종료에 관계없이 반환의 정상 또는 비정상 수익률, 자바 가상 머신이 현재의 thread의 현재의 스택 프레임을 배출합니다이며, 그것은 폐기.

 

하드웨어 관점

하드웨어 측면에서, 자바 바이트 코드를 직접 실행할 수 없습니다. 따라서, Java 가상 머신의 바이트 코드는 기계 코드로 번역 될 필요가있다.

두 가지 형태로 변환 처리하는 핫스팟 하나에 의해 제 해석된다, 즉, 하나의 머신 코드로 실행하는 바이트 코드를 변환하는 단계;

두 번째 타임 컴파일러 (적시 컴파일, JIT) 인 모든 바이트 코드는 메소드가 실행되기 전에 머신 코드로 컴파일 포함 관한 것이다.

후자는 실제로 실행 속도의 장점을 가지고있는 동안 전자는 대기 컴파일러 갖는 장점이있다.

 핫스팟 기본 혼합 모드는 모두 해석 및 실행 시간 컴파일의 이점을 결합한다.

먼저 바이트 코드를 해석하고되는 단위 시간 컴파일의 방법을 반복 한 후 핫 코드.

 

시간 컴파일

코드의 20 %는 컴퓨팅 자원의 80 %를 차지하고있는 프로그램에 맞춰 팔 개 법률의 가정을 기반으로 시간 컴파일.

의 대부분을 차지 자주 사용되는 코드의 경우, 우리는 시간이 많이 소요되는 기계 코드로 컴파일 아니라 동작의 해석 실행의 형태를 취할 필요가 없습니다;

한편, 우리가 원하는 동작 속도를 달성하기 위해, 머신 코드로 컴파일 될 수 있고, 핫 코드의 작은 부분을 차지한다.

 

C1, C2 및 GRAAL : 다른 사용자 시나리오에 내장 된 타임 컴파일러 핫스팟 복수의 요구를 충족하기 위해.

GRAAL 자바 (10)가 공식적으로 실험 시간 컴파일러를 도입 일시적으로 여기에 대한 논의이다.

 

이유 왜 무역 오프에 생성 된 코드와 컴파일 시간의 효율성 사이에 사용되는 인 - 타임 컴파일러의 복수의 도입.

 

C1은 비교적 간단한 방법을 사용하여 최적화 클라이언트 GUI 프로그램 시작 성능에 대한 요구 사항이, 클라이언트 컴파일러라고, 따라서 짧은 컴파일 시간입니다.

C2는 호출 서버 컴파일러 지향 서버 측 프로그램은 최대 성능을 채용 비교적 복잡한 최적화 방법을 위해 요구된다.

긴 컴파일 시간,하지만 생성 된 코드의 높은 효율 그래서.

핫 제 컴파일 방법 C1 후 뜨거운 온수 처리는 상기 컴파일한다 C2 : 자바 7부터 핫스팟 디폴트로 컴파일 성층.

응용 프로그램의 정상적인 작동을 방해하지 않기 위해, 인스턴트 핫스팟 컴파일러가 만든 추가 스레드에서 컴파일됩니다.

컴파일러 2 비율 구성 C1 및 C2 : 핫스팟 컴파일러는 CPU의 개수에 따라 스레드의 수, 및 1을 설정한다.

충분한 컴퓨팅 자원의 경우, 인스턴트 해석에서, 컴파일 된 바이트 코드가 동시에 수행 할 수있다.

사용 기계 코드 해석 원본을 대체하기 위해, 다음 컴파일 후 메소드를 호출합니다.

 

게시 된 113 개 원래 기사 · 원 찬양 25 ·은 30000 +를 볼

추천

출처blog.csdn.net/qq_42006733/article/details/104767269