바이트 실행 엔진
로컬 변수 테이블
조작 스택
동적 링크
메서드 반환 주소
방법 호출
해석
클래스 불러오는 해석 단계에서 일부 기호 인용을 직접 인용으로 전환할 수 있다. 전제는 방법이 프로그램이 실행되기 전에 확실한 호출 버전이 있고 실행 기간이 변할 수 없다는 것이다.
분파
정적 할당: 정적 형식 클래스에 의존하여 버전을 실행합니다.일반 응용 프로그램: 다시 불러오기.해석과 분파는 배타적인 것이 아니다. 정적 분파는 클래스 마운트에서 해석을 하고 정적 방법의 재부팅도 정적 분파를 통해 재부팅 버전을 확정한다.
public class StaticDispatch {
static abstract class Human{
}
static class Man extends Human{
}
static class Woman extends Human{
}
public void sayHello(Human human) {
System.out.println("hello human");
}
public void sayHello(Man man) {
System.out.println("hello man");
}
public void sayHello(Woman woman) {
System.out.println("hello woman");
}
public static void main(String[] args) {
Human man = new Man();
Human woman = new Woman();
StaticDispatch sd = new StaticDispatch();
sd.sayHello(man);
sd.sayHello(woman);
}
}
output:
hello human
Human man = new Man();
Human , 。
Man , 。
동적 할당: 실행 기간은 실제 유형에 따라 정해진 방법의 실행 버전입니다.전형적인 응용: 다시 쓰기.
public class DynamicDispatch {
static abstract class Human{
protected abstract void sayHello();
}
static class Man extends Human{
public void sayHello() {
System.out.println("hello man");
}
}
static class Woman extends Human{
public void sayHello() {
System.out.println("hello woman");
}
}
public static void main(String[] args) {
Human man = new Man();
Human woman = new Woman();
man.sayHello();
woman.sayHello();
}
}
output:
hello man
hello woman
*가상 시스템의 동적 할당은 어떻게 이루어집니까?동적 분배는 매우 빈번한 동작이고 방법 버전을 선택할 때 실행할 때 클래스의 메타데이터에서 적당한 목표 방법을 검색해야 하기 때문에 성능을 바탕으로 가상 머신은 클래스를 메타데이터 영역에 허방법표를 만들었다.성능을 향상시키기 위해 가상 방법을 사용하여 메타데이터를 대체합니다.허위 방법에는 각 방법의 실제 입구 주소가 저장되어 있고 자류가 부류를 다시 쓰는 방법이 없으면 부류 방법의 입구 주소가 저장되어 있다.다시 쓰면 하위 클래스 구현 방법의 입구 주소를 저장합니다.
창고 기반 명령 집합과 레지스터 기반 명령 집합
창고 기반: 이식 가능하며 속도가 느립니다.레지스터 기반: 속도가 빠르다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.