자바는 객체 지향 언어이면서 더 근본적으로는 프로그래밍 언어다.
- JDK(Java Development Kit)
- 자바 개발 도구
- JRE(Java Runtime Environment)
- 자바 실행 환경
- JVM(Java Virtual Machine)
- 자바 가상 기계
객체 지향 프로그램에서 메모리 사용 방식
- 코드 실행 영역
- 데이터 저장 영역
- Static 영역
public Class Test {
public static void main(String[] args) {
System.out.println("Test");
}
}
- JRE에서 프로그램의 main() 메서드 존재 확인
- JRE가 JVM을 동작 시킴
- 동작한 JVM은 목적 파일을 받아 목적 파일을 실행
- JVM은 java.lang 패키지(모든 자바 프로그램이 반드시 포함하게 됨)를 static 영역에 놓음
- JVM은 개발자가 작성한 모든 클래스와 import 패키지를 static 영역에 가져다 놓음
- 위 코드의 2번째 줄 실행 시 main() 메서드의 스택 프레임을 stack 영역에 할당
- 스택 프레임은 여는 중괄호를 만날 때마다 생성(클래스를 정의하는 중괄호는 제외)
- 메서드의 인자를 저장할 변수의 공간을 스택 프레임 맨 아래 할당
- sout 실행
- 닫는 중괄호를 만나면 스택 프레임 소멸
- 지역 변수도 스택 영역에 생김 (스택 프레임이 사라지면 같이 사라짐)
- 클래스 멤버 변수는 Static 영역에 생김(자리를 잡고 나면 JVM이 종료될 때까지 그대로 있음) JAVA 8 버전 부터는 Heap 영역
- 객체의 멤버 변수는 Heap 영역에 생김 GC가 발생하면 소멸된 객체의 멤버 변수는 사라짐