728x90

프로세스 메모리 구조

  • 프로세스(process)란 실행중에 있는 프로그램을 의미한다. (process는 task, job이라고도 한다.)
  • 이때 각 프로세스는 독자적인 주소공간을 가지고있고, 그 주소공간이 어떤 구조로 이루어져있는지 확인한다.

  • Text
    프로그램에 있는 함수 코드,제어문,상수등을 포함한다. Text영역에는 실제 코드를 CPU가 실행할수 있는 기계어의 형태로 변환하여 저장하는 공간이다.
  • Data(BSS+GVAR)
    전역변수 또는 Static 변수등이 저장되는 공간이다.
  • Heap
    사용자가 생성한 객체들이 저장되는 공간이다.
    Heap은 포인터를 사용해서 데이터를 조회한다.
    동적할당되는 메모리 공간이며 java에서는 new 명령으로 할당할수 있다.
  • Stack
    사용자가 작성한 함수에 대한 리턴 주소, 매개변수, 지역변수,등이 저장된다.
    정적할당되는 메모리 공간이다.
    Stack은 사용할수 있는 공간이 정해져있다. 즉 함수가 호출됨에 따라 call stack이 Stack영역에 쌓이게 되는데 재귀호출을 통해 무한히 call stack을 쌓게되면 언젠가 Stack 영역을 넘어서 stackoverflow가 발생하게 된다.

메모리 동적, 정적할당

  • 메모리 동적 할당
    동적할당이란 프로그래밍에서 실행시간동안 메모리 공간을 할당하는 것을 말한다.위 코드처럼 java에서 new 연산자등을 활용해 프로그램 도중 필요한 양만큼을 할당하는것이다.
    프로그램 종료시 Garbage Collector가 정리한다.
  • int[] a; a = new int[5];
  • 메모리 정적 할당
    정적할당이란 프로그램이 실행될때 이미 메모리의 크기가 결정되어있다는 뜻이다.정적할당시 위 코드처럼 메모리의 크기가 이미 하드코딩 되어있다.
    정적할당시 함수의 호출이 끝나면 사라지지만 함수가 종료될때까지 안쓰는 메모리가 낭비될수 있다.
  • int[] a = new int[10];

Garbage Collection

  • Garbage Collection(GC)Unreachable Object를 우선적으로 메모리에서 제거하여 메모리 공간을 확보하는 JVM에서 자동적으로 제공하는 기능이다.
  • 여기서 Unreachable Object란 Stack 영역에서 접근할수 없는 Heap 영역의 객체를 말한다.

JVM 메모리 구조

  • 운영체제를 통해 JVM은 메모리를 할당받으며, JVM이 할당받은 메모리 구조는 위 사진과 같다.
  • Heap 메모리
    JVM이 객체 또는 동적 데이터를 저장하는 곳이며(모든 Object타입(String,Integer,ArrayList..)), Garbage Collection(GC)이 일어나는 곳이기도하다.
    Stack 영역과는 다르게 몇개의 스레드가 존재하든 하나의 Heap 영역만 존재한다.
  • Young generation
    새로운 객체가 저장되는 곳이며 짧게 살아남는 메모리들이 존재하는 공간이다.
    Yong generation영역에서 발생되는 garbage collection을 Minor GC라고 하며 Young generation은 Minor GC에서 관리하는 공간이다
  • Old generation
    Young generation과는 다르게 길게 살아남는 메모리들이 존재하는 공간이다.
    Young generation에서 GC에의해 제거되지 않은 경우 Old generation으로 이동한다.
    Old generation을 관리하는 GC를 Major GC라고 부른다.
  • Thread Stacks
    스택메모리 영역이며, 프로세스의 스레드당 하나의 스택 메모리가 존재한다.
  • Stack 영역에는 Heap영역에 생성된 Object 타입의 데이터의 참조값이 할당되며,원시타입의 데이터가 값과 함께 할당된다.

Reference

728x90

'CS' 카테고리의 다른 글

CS) 객체지향(OOP)  (0) 2023.02.08
CS) Virtual Memory  (0) 2023.02.08
CS) Byte padding  (0) 2023.02.08
CS) CPU구조와 동작과정  (0) 2023.02.08
VS Code(Remote SSH)  (0) 2023.02.05

+ Recent posts