무지목록 자바 메모리 구조

스레드와 프로세스에 이어 자바 메모리 구조에대한 질문이 들어왔다. 힙과 스택밖에 기억이 안났다. 앞서 스레드와 프로세스에 털린 멘탈이 급하게 외쳤다. 스택과 힙이 있다는 것만 기억이 나고 나머지는 잘 모르겠습니다.. 자.. 지금 알아보자.

자바 메모리 구조

  • JVM 메모리 JVM 메모리

메모리 영역

런타임 데이터 영역
JVM의 메모리 영역으로 자바 애플리케이션을 실행 할 때 사용되는 데이터들을 적재하는 영역이다.

Method 영역

static영역 (class, method)은 전역변수나 static으로 선언되는 것들을 메모리에 상주시킨다.

클래스 정보, static 변수, 변수 정보, 메소드 정보 등을 저장한다. JVM이 동작해서 클래스가 로딩될 때 생성된다. JVM이 종료될 때까지 유지된다.

힙 영역

인스턴스를 생성할 때 생성되는 메모리 형식이다.

new를 사용하여 객체를 만들 때, 참조형 자료형이 저장된다. 힙의 참조 주소는 스택이 갖고 있고 해당 객체를 통해서만 힙 영역에 있는 인스턴스를 핸들링 할 수 있다. 가비지 컬렉터가 정리하기 전까지 남아있다.

스택 영역

기본 자료형을 생성할 때 저장하는 공간이다. 임시적으로 사용되는 변수나 정보들이 저장되는 영역이다.

스레드 별로 1개만 생성된다. 하나의 스레드는 내부적으로 stack,static,heap 영역을 갖게 된다. 메소드가 호출될 때마다 생성하고, 실행이 끝나면 pop되어 제거된다.

PC 레지스터

스레드가 생성될 때마다 생성되는 영역으로 프로그램 카운터, 즉 현재 스레드가 실행되는 부분의 주소와 명령을 저장하고 있는 영역이다.

가비지 컬렉션?

JVM의 Heap 영역에서 동적으로 할당했던 메모리 영역 중 필요 없게 된 메모리 영역을 주기적으로 삭제한다.

GC가 너무 자주 실행되면 소프트웨어 성능 하락의 문제가 된다.


Java가 주 언어이면서 Java에대해 너무 모른다. 기초, 기본보다 응용에 집중했던거 같다. 그러다보니 기반이 부족하니 응용을 아무리해도 흔들렸다. 기초를 다잡자. 더 좋은 개발자가 되기 위하여!

results matching ""

    No results matching ""