자바 파일은 크게 필드 + 생성자+ 메서드로 구성되어 있고 그중 필드 부분에서 선언한 전역변수 와 정적 멤버변수 이 두가지는 static 영역에 데이터를 저장하고 사용한다. 이 영역에서 데이터는 프로그램의 시작부터 종료될 때까지 메모리에 남아 있다.
전역변수를 무분별하게 사용하면 메모리가 부족할 우려가 있으니 필요한 변수만 사용하기!
- 패키지나 클래스 정보가 호출되는 시점에 즉시 메소드 영역에 올라간다
- static 이 붙은 클래스 멤버 필드, 멤버메서드 역시 포함이다
- JVM 종료 시점까지 사라지지 않고 유지된다
- 클래스, 메소드 영역이라고 불린다.
- 클래스 변수
- static 키워드를 가지고 필드에 선언하는 변수 = 정적 필드 (메모리의 static 영역 사용)
- 프로그램 시작시 생성, 프로그램 종료시 소멸
- 멤버 변수(인스턴스 변수)
- static 키워드 없이 필드에 선언하는 변수 (메모리의 heap영역 사용)
- 인스턴스 생성 시 생성, 참조하지 않을시 소멸(가비지 컬렉터가 소멸시킴)
- 지역 변수
- 메소드, 생성자, 초기화 블록 내부에서 선언하는 변수
- 메소드 호출 시 생성, 메소드 종료시 소멸
- JVM은 자바 프로그램을 실행하기 위한 가상 머신, 자바 바이트코드를 실행하고 메모리 관리와 가비지 컬렉션(GC) 등의 작업을 수행.
- 프로세스는 운영체제에서 실행 중인 프로그램을 의미. 각 프로세스는 독립된 메모리 공간을 할당받아 사용, 다른 프로세스와 데이터를 공유하려면 특별한 방법(IPC)이 필요.
- 스레드는 프로세스 내에서 실행되는 작업의 단위. 하나의 프 로세스에 여러 개의 스레드가 존재할 수 있으며 이들은 같은 메모리 공간을 공유하면서 동시에 작업을 수행 가능.
- JVM과 프로세스와 스레드는 서로 다른 개념이지만 관계 있음. 자바 프로그램이 실행되면 JVM이 시작되고 이 JVM은 하나의 프로세스. 이 JVM 프로세스 내부에서 여러 개의 스레드가 생성되어 작업을 수행.