728x90

 

 

자바 가상 머신 (Java Virtual Machine, JVM)

 

자바 가상 머신은 물리적인 실제의 기계 장치가 아니라 추상적인 장치이며, 클래스 파일을 실행할 수 있는 기계어 파일로 번역해준다.

 

 

 

자바 가상 머신은 클래스 영역, 자바 스택 영역, 힙 영역, 네이티브 메소드 스택 영역으로 구성되어 있다.

 

1. 클래스 영역

: 실행에 필요한 클래스들을 로드하여 저장하는 공간이다. 로드된 클래스의 멤버 메소드들은 메소드 영역에 저장되고, 상수들은 상수 영역에 저장된다. 또한 사용자가 작성한 클래스 코드를 저장하는 영역이다.

 

2. 자바 스택 영역

: 자바 프로그램을 수행하면서 발생하는 메소드 호출과 복귀에 대한 정보를 생성하여 저장하고 관리하는 공간이다. 그렇기 때문에 인터럽트가 발생하는 등의 요청이 중간에 발생했을 경우에 복귀정보를 담는 곳이기도 하다.

 

3. 힙 영역

: 객체를 생성할 때 동적으로 공간을 할당하여 객체를 저장하는 공간이다. 자바의 가비지컬렉션 (Garbage Collection, GC) 기능으로 사용이 끝난 객체의 공간이 관리되는 공간이다. 가비지 컬렉션 힙 영역으로도 불리며, GC같은 경우에 사용자가 호출하여 사용하지 않는 메모리 공간에 대해 관리 요청을 할 수는 있지만, 실제적으로 작업이 일어나는지는 알 수 없으며 GC의 판단에 의해 스스로 작업을 수행한다.

 

4. 네이티브 메소드 스택 영역

: 자바에는 하드웨어를 직접 제어하는 기능이 없다. 그래서 하드웨어를 제저해야 할 경우에는 C언어와 같은 다른 언어의 기능을 잠시 빌려서 사용하는데, 이때 사용하는 것이 JNI(Java Native Interface) 기술이다. 네이티브 메소드들이 바이트 코드로 변환되면서 사용되고 기록하는 영역이 네이티브 메소드 스택 영역이다.

 

 

 

출처 : 자바로 배우는 쉬운 자료구조, 한빛미디어, 이지영 저

 

 


 

 

 

아무래도 마음에 걸려서 추가 수정을 하게 되었다.

자바에 유명한 말이 있다.

 

Write Once Run Anywhere

 

한번 쓰면 어디서든 실행할 수 있다라는 말이다.

이게 무슨 말일까?

 

728x90

 

 

이렇게 생기진 않았겠지만, 굳이 설명을 위해 다음과 같은 이미지를 그림판으로 준비했다.

 

 

 

세상엔 다양한 종류의 플랫폼이 있다.

그렇기 때문에 해당 플랫폼에서 작동하도록 프로그램을 만들었다면

그 플랫폼에서만 작동을 하고 플랫폼이 바뀌면 그 플랫폼에 맞게 수정하는 과정이 필요하다.

꽤나 번거로운 일이 아닐 수 없다.

 

그래서 자바에는 JVM(Java Virtual Machime)이라는 가상 머신이 존재한다.

이 가상머신은 자바로 작성된 프로그램이 컴파일된 결과 class파일을 한줄씩 읽으면서(인터프리터 방식) 실행을 하는 역할을 한다.

그래서 오해하면 안되는 사실중 하나가 ​class 파일은 실행 파일이 아니라는 것​이다.

클래스 파일을 열심히 더블클릭 해봐라, 얘가 거들떠나 봐줄까보다

 

그렇다면 이 JVM은 어떻게 Write Once Run Anywhere가 가능하게 해주는 것일까?

다음 그림판으로 작성한 그림을 보면 이해가 될 것이다.

 

 

 

바로 이런식이다.

각 플랫폼에 맞는 JVM을 배포하는 것이다.

그러면 자바가 설치된 어느곳에서든 컴파일된 class파일만 있다면 어디서든 플랫폼의 제약을 받지 않고 수십번 수백번 수천 수만번 수정없이 실행할 수 있는 것이다.

 

자바를 처음 접한다면 플랫폼의 제약이라는 말이 다소 낯설게 느껴지겠지만

사실 알고보면 별거 아닌 내용이다.

 

 

 

 

728x90

+ Recent posts