자바 가상 머신 (Java Virtual Machine, JVM)
자바 가상 머신은 물리적인 실제의 기계 장치가 아니라 추상적인 장치이며, 클래스 파일을 실행할 수 있는 기계어 파일로 번역해준다.
자바 가상 머신은 클래스 영역, 자바 스택 영역, 힙 영역, 네이티브 메소드 스택 영역으로 구성되어 있다.
1. 클래스 영역
: 실행에 필요한 클래스들을 로드하여 저장하는 공간이다. 로드된 클래스의 멤버 메소드들은 메소드 영역에 저장되고, 상수들은 상수 영역에 저장된다. 또한 사용자가 작성한 클래스 코드를 저장하는 영역이다.
2. 자바 스택 영역
: 자바 프로그램을 수행하면서 발생하는 메소드 호출과 복귀에 대한 정보를 생성하여 저장하고 관리하는 공간이다. 그렇기 때문에 인터럽트가 발생하는 등의 요청이 중간에 발생했을 경우에 복귀정보를 담는 곳이기도 하다.
3. 힙 영역
: 객체를 생성할 때 동적으로 공간을 할당하여 객체를 저장하는 공간이다. 자바의 가비지컬렉션 (Garbage Collection, GC) 기능으로 사용이 끝난 객체의 공간이 관리되는 공간이다. 가비지 컬렉션 힙 영역으로도 불리며, GC같은 경우에 사용자가 호출하여 사용하지 않는 메모리 공간에 대해 관리 요청을 할 수는 있지만, 실제적으로 작업이 일어나는지는 알 수 없으며 GC의 판단에 의해 스스로 작업을 수행한다.
4. 네이티브 메소드 스택 영역
: 자바에는 하드웨어를 직접 제어하는 기능이 없다. 그래서 하드웨어를 제저해야 할 경우에는 C언어와 같은 다른 언어의 기능을 잠시 빌려서 사용하는데, 이때 사용하는 것이 JNI(Java Native Interface) 기술이다. 네이티브 메소드들이 바이트 코드로 변환되면서 사용되고 기록하는 영역이 네이티브 메소드 스택 영역이다.
출처 : 자바로 배우는 쉬운 자료구조, 한빛미디어, 이지영 저
아무래도 마음에 걸려서 추가 수정을 하게 되었다.
자바에 유명한 말이 있다.
Write Once Run Anywhere
한번 쓰면 어디서든 실행할 수 있다라는 말이다.
이게 무슨 말일까?
이렇게 생기진 않았겠지만, 굳이 설명을 위해 다음과 같은 이미지를 그림판으로 준비했다.
세상엔 다양한 종류의 플랫폼이 있다.
그렇기 때문에 해당 플랫폼에서 작동하도록 프로그램을 만들었다면
그 플랫폼에서만 작동을 하고 플랫폼이 바뀌면 그 플랫폼에 맞게 수정하는 과정이 필요하다.
꽤나 번거로운 일이 아닐 수 없다.
그래서 자바에는 JVM(Java Virtual Machime)이라는 가상 머신이 존재한다.
이 가상머신은 자바로 작성된 프로그램이 컴파일된 결과 class파일을 한줄씩 읽으면서(인터프리터 방식) 실행을 하는 역할을 한다.
그래서 오해하면 안되는 사실중 하나가 class 파일은 실행 파일이 아니라는 것이다.
클래스 파일을 열심히 더블클릭 해봐라, 얘가 거들떠나 봐줄까보다
그렇다면 이 JVM은 어떻게 Write Once Run Anywhere가 가능하게 해주는 것일까?
다음 그림판으로 작성한 그림을 보면 이해가 될 것이다.
바로 이런식이다.
각 플랫폼에 맞는 JVM을 배포하는 것이다.
그러면 자바가 설치된 어느곳에서든 컴파일된 class파일만 있다면 어디서든 플랫폼의 제약을 받지 않고 수십번 수백번 수천 수만번 수정없이 실행할 수 있는 것이다.
자바를 처음 접한다면 플랫폼의 제약이라는 말이 다소 낯설게 느껴지겠지만
사실 알고보면 별거 아닌 내용이다.
'프로그래밍 언어 > Java' 카테고리의 다른 글
java 제네릭 (Generic), 내가 알아보기 쉽게 정리 - 2편, 어떻게 제네릭 (0) | 2017.05.25 |
---|---|
java 제네릭 (Generic), 내가 알아보기 쉽게 정리 - 1편, 왜 제네릭 (1) | 2017.05.25 |
java 환경변수 설정 방법과 이유 총정리 (0) | 2017.05.24 |
java (스태틱) static 이란 도대체 무엇인가 (0) | 2017.05.24 |
객체지향 개념, 객체지향에서 사용되는 용어 정리 (0) | 2017.05.24 |