_Programming/Java
Java.메모리영역
Pro_go
2020. 11. 12. 12:03
java.exe로 JVM이 시작되면 JVM은 운영체제에서 할당 받은 메모리 영역(Runtime Data Area)을 세부영역으로 구분해서 사용한다.
메소드 영역(Method), 힙(Heap)영역, 스택(Stack)영역이 바로 그 세부영역이다.
메소드(Method)영역
메소드 영역은 JVM이 시작할 때 생성되고 모든 스레드가 공유하는 영역으로
클래스별로 데이터나 코드들을 분류해서 저장한다.
힙(Heap)영역
객체와 배열이 생성되는 영역으로
이 영역에 생선된 객체와 배열은 스택영역의 변수나 다른 객체의 필드에서 참조한다.
여기서 의미 없는 객체는 자동으로 쓰레기 수집기를 통하여 제거한다.
스택(Stack)영역
각 스레드마다 하나씩 존재하며 스레드가 시작될 때 할당되며
만약 자바 프로그램에서 추가적으로 스레드를 생성하지 않았다면 main스레드 하나만 존재하므로 스택도 하나만 존재한다.
스택(Stack)은 메소드를 호출할 때마다 프레임을 추가(push)하거나 제거(pop)한다.
변수가 이 영역에 생성되는 시점은 초기화 될 때이고, 선언된 블록 안에서만 스택에 존재하고 벗어나면 제거된다.