Java Virtual Machine 의 줄임말로, 직역하면 ‘자바를 실행하기 위한 가상 기계/컴퓨터’라고 할 수 있습니다.
개발자들이 말하는 JVM은 보통 어던 기기상에서 실행되고 있는 프로세스, 특히 자바 앱에 대한 리소스를 대표하고 통제하는 서버를 지칭합니다.
Java는 OS에 종속적이지 않다는 특징을 가지고 있습니다. 따라서 OS에 족속받지 않고 실행되려면 OS위에서 Java를 실행시킬 무언가가 필요한데, 그 역할을 하는게 JVM 입니다.
쉽게 말해서, OS에 종속받지 않고 CPU가 Java를 인식하고 실행할 수 있게 하는 가상 컴퓨터 입니다.
자바 애플리케이션을 클래스 로더를 통해 읽어들이고, 자바 API와 함께 실행되는 역할을 합니다. JAVA와 OS사이에서 중개자 역할을 수행하여 OS에 종속(구애)받지 않고 재사용을 가능하게 해줍니다.
이해를 돕기 위한 내용
Java 소스코드(.java)는 CPU가 인식을 못해서 기계어로 컴파일을 해줘야합니다. 하지만 Java는 JVM(가상머신)을 거쳐서 OS에 도달하기 때문에 OS가 인식할 수 있는 기계어로 컴파일되는게 아니라, JVM이 인식할 수 있는 Java bytecode(.class)로 변환합니다.
Java compiler가.java
파일을.class
라는 Java bytecode로 변환합니다. 변환된 bytecode는 기계어가 아니라서 OS에서는 바로 실행되지 않습니다. 이 때 JVM이 OS가 bytecode를 이해할 수 있도록 해석해줍니다.
따라서 Bytecode는 JVM위에서 OS 상관없이 실행될 수 있습니다. 죽! Java 파일 하나만 만들면 어느 디바이스든 JVM 위에서 실행할 수 있습니다.
- 여기서 Java compiler는 JDK를 설치하면 bin 에 존재하는 javac.exe를 말합니다.
즉, JDK에 Java compiler가 포함되어 있다는 말입니다. Javac 명령어를 통해 .java를 .class 로 컴파일 할 수 있습니다.- bytecode : 가상 컴퓨터(VM)에서 돌아가는 실행 프로그램을 위한 이진 표현법입니다.
Java bytecode는 JVM이 이해할 수 있는 언어로 변환된 자바 소스코드를 의미합니다.
JVM 실행에 있어서 가장 일반적인 상호작용은, 힙과 스택의 메모리 사용을 확인하는 것입니다.
보통 줄여서 GC라고 부릅니다., 자바 이전에는 프로그래머가 모든 프로그램 메모리를 관리했지만 자바에서는 JVM이 이 프로그램 메모리를 관리합니다. 이 때 JVM은 GC라는 프로세스를 통해 메모리를 관리합니다. 가비지 컬렉션은 자바 프로그램에서 사용되지 않는 메모리를 지속적으로 찾아내서 제거하는 역할을 합니다.