✔ 자바 프로그램과 실행의 원리에 대한 이해
자바 프로그램의 실행 구조와 자바 가상머신
- 일반적인 프로그램은 윈도우 또는 리눅스와 같은 운영체제 위에서 실행이 됨
- 하드웨어를 기반으로 운영체제가 동작하고, 그 위에서 프로그램이 실행되는 구조
즉, 하드웨어 위에서 실행되는 운영체제가 프로그램을 실행시키는 구조
- 자바 프로그램은 운영체제가 자바 가상머신을 실행시키고, 자바 가상머신이 자바 프로그램을 실행시키는 구조
- 자바 가상머신은 운영체제 위에서 동작하는 일종의 소프트웨어로
자바 프로그램을 운영체제에 상관없이 실행시키기 위해 사용됨
자바 컴파일러와 자바 바이트코드
- 자바 컴파일러인 javac.exe는 소스파일에 저장된 소스코드를 자바 가상머신이 이해할 수 있는 자바 바이트코드로 변환함
- 이후 바이트코드는 확장자가 class인 클래스 파일에 담기게 됨
- 자바 런처인 java.exe는 자바 가상머신을 구동하고 그 위에 자바 프로그램이 실행되도록 돕는 프로그램
✔ 자바 가상머신의 메모리 모델
자바 프로그램의 메모리 관리
- 자바 가상머신은 운영체제 위에서 실행되는 하나의 프로그램이며, 자바 프로그램은 자바 가상머신 위에서 실행되는 프로그램
- 가상머신은 프로그램의 실행에 필요한 메모리 공간을 운영체제로부터 할당받게 됨
- 자바 가상머신은 운영체제가 할당해주는 메모리 공간을 기반으로 스스로를 실행하며 더불어 자바 응용 프로그램의 실행을 도움
자바 가상머신의 메모리 공간 사용방법
- 가상머신은 운영체제로부터 할당받은 메모리 공간을 효율적으로 사용하기 위해 메모리 관리를 해야 함
- 이를 위해 메모리 공간을 나누고 데이터를 특성에 따라 구분해서 저장함
- 가상머신은 메모리 공간을 크게 세 개의 영역으로 나눔
- 메소드 영역 : 메소드의 바이트코드, static 변수 저장
- 스택 영역 : 지역변수, 매개변수 저장
- 힙 영역 : 인스턴스 저장
- 메소드 영역은 소스파일을 컴파일할 때 생성되는 바이트코드가 로딩될 때 사용되는 메모리 공간
- 즉, 특정 클래스의 정보가 메모리 공간에 올려질 때 채워지는 영역
- 스택 영역은 지역변수와 매개변수가 저장되는 메모리 공간
- 중괄호 내에 할당된 이후에 해당 중괄호를 벗어나면 바로 소멸되는 특성의 데이터 저장을 위한 영역
- 힙 영역은 인스턴스가 저장되는 메모리 공간
- 인스턴스의 소멸 시점과 소멸 방법이 지역변수와 다르기 때문에 스택이 아닌 힙이라는 별도의 영역에 할당
자바 가상머신의 인스턴스 소멸시기
- 자바 가상머신은 합리적으로 인스턴스의 소멸시기를 결정함
- 어느 참조변수도 참조하지 않는 상태의 인스턴스가 될 경우 더 이상 접근할 수 없어 존재할 필요가 없으므로
인스턴스는 소멸의 대상이 되어 가상머신에 의해 소멸이 이뤄짐
- 이러한 자바의 인스턴스 소멸 방식을 가리켜 가비지 컬렉션이라고 함
- 힙 영역은 가상머신에 의한 가비지 컬렉션이 일어나는 메모리 공간
public static void simpleMethod() {
String str1 = new String("My String");
String str2 = new String("Your String");
...
str1 = null; // 참조 관계 소멸 -> 소멸의 대상
str2 = null; // 참조 관계 소멸 -> 소멸의 대상
...
}