메모리, JVM Stack,Heap

chanyoun·2023년 1월 12일
0

프로세스 메모리 구조

  • 프로세스(process)란 실행중에 있는 프로그램을 의미한다. (process는 task, job이라고도 한다.)

  • 이때 각 프로세스는 독자적인 주소공간을 가지고있고, 그 주소공간이 어떤 구조로 이루어져있는지 확인한다.


  • Text
    프로그램에 있는 함수 코드,제어문,상수등을 포함한다. Text영역에는 실제 코드를 CPU가 실행할수 있는 기계어의 형태로 변환하여 저장하는 공간이다.

  • Data(BSS+GVAR)
    전역변수 또는 Static 변수등이 저장되는 공간이다.

  • Heap
    사용자가 생성한 객체들이 저장되는 공간이다.
    Heap은 포인터를 사용해서 데이터를 조회한다.
    동적할당되는 메모리 공간이며 java에서는 new 명령으로 할당할수 있다.

  • Stack
    사용자가 작성한 함수에 대한 리턴 주소, 매개변수, 지역변수,등이 저장된다.
    정적할당되는 메모리 공간이다.
    Stack은 사용할수 있는 공간이 정해져있다. 즉 함수가 호출됨에 따라 call stack이 Stack영역에 쌓이게 되는데 재귀호출을 통해 무한히 call stack을 쌓게되면 언젠가 Stack 영역을 넘어서 stackoverflow가 발생하게 된다.


메모리 동적, 정적할당

  • 메모리 동적 할당
    동적할당이란 프로그래밍에서 실행시간동안 메모리 공간을 할당하는 것을 말한다.

    int[] a;
    a = new int[5];

    위 코드처럼 java에서 new 연산자등을 활용해 프로그램 도중 필요한 양만큼을 할당하는것이다.
    프로그램 종료시 Garbage Collector가 정리한다.

  • 메모리 정적 할당
    정적할당이란 프로그램이 실행될때 이미 메모리의 크기가 결정되어있다는 뜻이다.

    int[] a = new int[10];

    정적할당시 위 코드처럼 메모리의 크기가 이미 하드코딩 되어있다.
    정적할당시 함수의 호출이 끝나면 사라지지만 함수가 종료될때까지 안쓰는 메모리가 낭비될수 있다.


Garbage Collection

  • Garbage Collection(GC)Unreachable Object를 우선적으로 메모리에서 제거하여 메모리 공간을 확보하는 JVM에서 자동적으로 제공하는 기능이다.

  • 여기서 Unreachable Object란 Stack 영역에서 접근할수 없는 Heap 영역의 객체를 말한다.


JVM 메모리 구조

profile
기록은 힘들어

0개의 댓글