가상 컴퓨터 에 대하 여(1)

오늘 책 을 읽 을 때 갑자기 가상 컴퓨터 에 관 한 문제 가 생각 났 다.jvm 은 도대체 어떻게 밑바닥 의 운영 체 제 를 차단 하고 크로스 플랫폼 에 도 착 했 는 지.자바 의 가상 머 신 은 일반적으로 이렇게 해석 되 는 것 을 알 고 있 습 니 다.자바 가상 머 신(JVM)은 자바 가상 머 신의 줄 임 말 입 니 다.이것 은 허구 적 인 컴퓨터 로 실제 컴퓨터 에서 각종 컴퓨터 기능 시 뮬 레이 션 을 모방 하여 이 루어 집 니 다.자바 가상 컴퓨터 는 프로세서,스 택,레지스터 등 자신 만 의 완벽 한 하드웨어 구 조 를 가지 고 있 으 며 해당 하 는 명령 시스템 도 가지 고 있다.
 
자바 소스 파일 을 컴 파일 할 때 컴 파일 러 는 소스 코드 를 컴 파일 하여 jvm 만 아 는 바이트 파일(0101 로 구 성 된 코드)로 컴 파일 합 니 다.이 2 진 코드 는 컴퓨터 라면 모두 실행 할 수 있 습 니 다.이에 대응 하 는 문맥 이 포 함 된 경우 입 니 다.사실 가상 컴퓨터 라 는 것 에 대해 잘 모 르 겠 습 니 다.cpu 와 레지스터 에서 명령 을 수행 하 는데 가상 설 은 무엇 입 니까?어떻게 가상 합 니까?그리고 서로 다른 플랫폼 에 대해 왜 플랫폼 차이 가 있어 야 하 는 지,차이 가 어디 에 있 는 지,똑 같은 논 리 를 집행 하고 심지어 똑 같은 코드 를 서로 다른 플랫폼 에서 집행 할 때 차이 가 있 는 지?
 
간단 한 자바 코드 목록 을 보 여 줍 니 다:Public class Jvm{
        static{
                System.out.println("this is a test");
        }
}

 다음은 바이트 정보 입 니 다.
 
public class Jvm extends java.lang.Object{
public Jvm();
  Code:
   0:	aload_0
   1:	invokespecial	#1; //Method java/lang/Object."<init>":()V
   4:	return

static {};
  Code:
   0:	getstatic	#2; //Field java/lang/System.out:Ljava/io/PrintStream;
   3:	ldc	#3; //String this is a test
   5:	invokevirtual	#4; //Method java/io/PrintStream.println:(Ljava/lang/String;)V
   8:	return

}

 사실 이런 어 셈 블 리 바이트 코드 는 실제 코드 는 2 진 코드 입 니 다.이런 코드+문맥 정 보 는 jvm 만 알 고 있 습 니 다.모든 명령 에 대응 하 는 2 진 코드 는 aload 와 같 습 니 다.0.위치 가 0 인 대상 을 부분 변 수 를 참조 하여 스 택 에 눌 러 넣 습 니 다.cpu 에서 10011...................................................................................
 
가상 머 신 을 어떻게 실현 하 는 지 에 대해 저 는 자바 가상 머 신 을 깊이 이해 하 는 것 을 보 았 습 니 다.구체 적 으로 말 하면 좋 지만 저 는 C(조금 밖 에 모 르 기 때문에 jvm 규범 이 실현 되 기 어렵 습 니 다.어쨌든 마지막 으로 간단하게 말 하면 자바 의 크로스 플랫폼 은 같은 2 진 코드 를 통 해 서로 다른 플랫폼 에서 서로 다른 집행 체 제 를 통 해 이 루어 진 기능 입 니 다.

좋은 웹페이지 즐겨찾기