봐도 봐도 계속 까먹고 헷갈리는 개념과 용어를 다시 한번 블로그에 정리하려 한다
#JVM이란?
JVM이란 JAVA Virtual Machine, 자바 가상 머신의 약자를 따서 줄여 부르는 용어이다 (가상 머신이란 프로그램의 실행하기 위해 물리적 머신과 유사한 머신을 소프트웨어로 구현한 것이다.) JVM 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는 것이다. 그리고 JVM은 JAVA와 OS 사이에서중개자 역할을 수행하여 JAVA가 OS에 구애받지 않고 재사용을 가능하게 해 준다.그리고 가장 중요한 메모리 관리, Garbage collection을 수행한다. 그리고 JVM은 스택 기반의 가상 머신이다. ARM 아키텍처 같은 하드웨어는 레지스터 기반으로 동작하는데 비해 JVM은 스택 기반으로 동작한다.
자바 프로그램 실행 과정
1. 프로그램이 실행되면 JVM은 OS로부터 이 프로그램이 필요로 하는 메모리를 할당받는다.
JVM은 이 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.
2. 자바 컴파일러(javac)가 자바 소스코드(. java)를 읽어 들여 자바 바이트코드(. class)로 변환시킨다.
3. Class Loader를 통해 class파일들을 JVM으로 로딩한다.
4. 로딩된 class파일들은 Execution engine을 통해 해석된다.
5. 해석된 바이트코드는 Runtime Data Areas에 배치되어 실질적인 수행이 이루어지게 된다.
이러한 실행 과정 속에서 JVM은 필요에 따라 Thread Synchronization과 GC 같은 관리 작업을 수행한다.
왜 자바 가상 머신을 알아야 하는가?
한정된 메모리를 효율적으로 사용하여 최고의 성능을 내기 위해서가 그 답이 될지 모르겠다. 메모리 효율성을 위해 메모리 구조를 알아야 하기 때문이다. 동일한 기능의 프로그램이더라도 메모리 관리에 따라 성능이 좌우된다. 메모리 관리가 되지 않은 경우 속도 저하 현상이나 튕김 현상 등이 일어날 수 있다. 그래서, 알아두면 좋다를 넘어서 알아야 하는 것이다.
출처 : https://asfirstalways.tistory.com/158
출처의 블로그에서는 정말 자세하게 잘 설명되어 있다. 위의 내용을 보고도 이해가 가지 않는다면 블로그를 방문해서 더 자세한 정보를 정리해 보는 것이 좋을 듯하다.
간단하게 한마디로 요약하자만 JVM은 자바라는 언어가 어느 OS에서든 돌아갈 수 있도록 컴파일(해석) 해주는 역할을 한다고 생각하면 될 것 같다