자바를 실행하기 위한 가상 기계
=> Java는 OS에 종속적이지 않음
=> OS에 종속받지 않고 실행되기 위해선, OS 위에서 Java를 실행시킬 무언가가 필요함
=> 이 것이 바로 JVM
즉, OS에 종속받지 않고, CPU가 Java를 인식, 실행할 수 있게 하는 소프트웨어
자바 프로그램이 어느 기기, 어느 운영체제 상에서도 실행될 수 있게 만들어줌(Write Once, Read Anywhere, WORA)
자바 프로그램의 메모리를 효율적으로 관리 & 최적화 해줌
=> How?
- 가비지 컬랙션(Garbage Collection)
- JVM이 메모리를 관리하는 프로세스를 지칭하는 용어
- 자바 프로그램 상에서 사용하지 않은 메모리를 지속적으로 찾아 제거함 => 효율적인 메모리 관리 가능
스택 프레임을 저장하는 메모리 공간
메서드 내에서 정의하는 기본 자료형(int, double 등)에 해당되는 지역 변수와 배개 변수의 데이터 값은 스택 프레임에 포함되어 스택 area에 저장됨
메서드가 호출될 때 메모리에 할당됨(Push)
메서드가 종료될 때 메모리에서 제거됨(Pop)
기본 자료형이 아닌 참조형 변수(객체)들은 heap 영역에 저장됨
스택 메모리의 top에 존재하는 하나의 스택 프레임만 활성화
그 전에 존재하는 스택 프레임은 모두 비활성화 됨
Heap 영역에 존재하는 객체들은 Stack 영역의 변수들에 의해 참조됨
- 실행중인 각 JVM 프로세스에 대해 Stack과 달리 Heap 메모리 영역은 단 하나만 존재함
참조
자바 클래스 라이브러리(Java Class Libraries), JVM, 자바 클래스 로더(Java Class Loader)를 포함
클래스 로더, 클래스 라이브러리를 통해 작성한 자바 코드를 라이브러리와 결합한 후 JVM으로 넘겨 실행시킴
JVM이 원활하게 작동할 수 있도록 환경을 맞춰주는 역할
JRE를 포함하고 있음(JRE는 JVM을 포함하고 있으므로, JDK는 JVM을 포함하고 있다고 볼 수 있음)
자바로 무언가를 만들고 싶은 사람은 JDK를 설치해야 함
JDK는 JRE에는 없는 Java Compiler를 포함하고 있음