일반 JVM (Java Virtual Machine)에 대한 몇가지 설명

황제낙엽 2003.05.06 10:22 조회 수 : 210 추천:164

sitelink1  
sitelink2  
sitelink3  
sitelink4  
sitelink5  
sitelink6  
1) "바이트코드"와 가상기계에 대해서

JDK를 설치하면 자바 컴파일러와 JVM이 같이 설치된다.

자바 컴파일러는 "플랫폼에 맞춘 자바 실행 시간환경"에서 실행될 "이진 바이트코드 포맷"을 만들어 낸다. 따옴표로 묶인 두 가지 말속에는 아름다움, 힘, 기능이 담겨 있다.

바이트코드는 본질적으로 코드의 중간형태이다. 다시 말해서 비교적 잚은 자바 언어 문장 집합에서 컴퓨터에서 거의 실행 준비 단계인 긴 중간 기계 명령 집합까지로 구성된다. 다른 말로 하면, 바이트코드 포맷은, 특수한 유형의 컴퓨터와 운영 체제에 적용하는 일부 기계어를 제외하고 보통 컴파일러가 수행하는 토큰화와 코드 생성 작업의 상당부분을 포함하고 있다.

이제 실행 시간 환경이 나설 차례이다. 자바 실행 시간 환경은 자바 컴파일러를 완전히 컴파일된 코드 80%를 취하고, 측정 컴퓨터에서 코드를 실행하는데 있어 플랫폼에 의존적인 나머지 20%를 추가한다. 자바는 수행 도중 자바 바이트코드를 읽고 번역함으로써 이 작업을 수행한다. 바로 이 점이 자바는 컴파일도 되고 해석(interpret)도 된다는 이유이다.

특정 기계에 대해 컴파일한 프로그램은 자바 바이트코드와 같이 중간 형태로 컴파일한 것보다 의심할 여지 없이 더 효율적이기 때문에, 이 구조에서는 성능에 약간의 제한이 따른다. 하지만 이러한 접근 방법에는, 이러한 비효율성을 별 대수롭지 않게 만드는 두 가지 놀라운 이점이 있다.

① 개발자들이 여러 플랫폼에 대해 별도의 버전을 만들어야 할 필요 없이, 자바가 지원하는 모든 플랫폼에 자바 애플리케이션을 만들 수 있다. 대부분 언어의 경우, 여러 플랫폼을 위한 개발은 엄청난 시간이 필요할 것이다.

② 해당 플랫폼에 대한 자바 실행 시간 환경을 사용할 수 있게 되면, 곧바로 자바 애플릿과 애플리케이션을 사용할 수 있다.


2) "컴파일러"와 "인터프리터"에 대하여

컴파일러는 고급 언어 프로그램을 기계어 프로그램으로 번역해 주는 특별한 프로그램이다. 이 프로그램은 고급 언어 프로그램의 각 문장을 적당한 일련의 기계어 명령으로 바꾸어 준다. 컴파일러는 프로그램 전부를 실행 전에 한꺼번에 번역한다.

이에 비해 인터프리터는 프로그램을 한 문장씩 기계어로 번역한다. 이것은 고급 명령어에 대한 해당 기계어 정보를 주는 내장 사전(built-in dictionary)을 이용, 프로그램을 한 줄 씩 번역하는 것을 뜻한다. 인터프리터 언어(interpreted language)를 사용하면 미숙련 프로그래머가 프로그램을 실행 시간동안 고치고 개선하기가 용이하다. 컴파일러를 사용하면 프로그램은 고칠 때마다 다시 번역되어야 한다. 그러나 인터프리터는 문장들이 나타날때마다 매번 번역을 하여야 하기 때문에 느리고, 반면에 컴파일러는 매번 번역할 필요는 없다. 초보자용 언어BASIC번역기의 반 정도가 인터프리터이고, 나머지 반은 컴파일러이다.

인터프리터가 등장한 시기는 컴퓨터의 입력장치가 카드천공방식이었다.
때문에 매우 느린 입력방식에 의해 소요되는 어마어마한 비용(?)과 시간은 당시에는 프로그래밍이라는 것에서 디버깅이라는 작업이 얼마나 값비싼 작업이었는지 유추할 수 있다. 그리고 아직도 디버깅이라는 작업에 있어서 컴파일과 인터프리터의 그러한 장단점을 이용하고 있다.
번호 제목 글쓴이 날짜 조회 수
23 Polymorphism과 Method Overriding에 대한 이야기 황제낙엽 2003.05.15 330
22 자바의 특징 황제낙엽 2003.05.06 450
» JVM (Java Virtual Machine)에 대한 몇가지 설명 황제낙엽 2003.05.06 210
20 자바설화 황제낙엽 2003.05.03 395
19 XML기반 정보 보호 기술의 대두 황제낙엽 2003.04.22 265
18 인터넷을 통한 자바 기술의 변화 황제낙엽 2003.04.07 493
17 JAVA관련 용어와 기술 황제낙엽 2003.04.05 458
16 UTF-8을 위한 문자열 인코딩처리 관련 황제낙엽 2006.10.06 881
15 Code Conventions for JavaTM Programing Language file 황제낙엽 2006.10.23 518
14 자바에서 UTF-8 개발에 관한 정리 (2) 황제낙엽 2006.10.06 543
13 자바에서 UTF-8 개발에 관한 정리 (1) 황제낙엽 2006.10.06 539
12 일본어 전각 반각 변환 예제 소스 .두번째 [1] file 황제낙엽 2007.01.11 569
11 일본어 전각 반각 변환 예제 소스 .첫번째 file 황제낙엽 2007.01.10 3371
10 환경파일 로드 클래스 구성 (XML파싱) 황제낙엽 2007.01.05 437
9 HttpURLConnection을 사용하여 웹 페이지 액세스하기 (두번째) 황제낙엽 2007.01.05 593
8 자바의 I/O 예제 [1] file 황제낙엽 2006.12.28 346
7 HttpURLConnection 클래스를 이용한 Search 황제낙엽 2006.12.28 670
6 HttpURLConnection을 사용하여 웹 페이지 액세스하기 (첫번째) 황제낙엽 2006.12.28 522
5 Servlet으로 구현한 파일 다운로드(download) 페이지 황제낙엽 2006.12.27 455
4 JSP로 구현한 파일 다운로드(download) 페이지 황제낙엽 2006.12.27 2583