CS) 프로세스 메모리 구조
2023. 2. 8. 16:37
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
- https://dev.to/deepu105/visualizing-memory-management-in-jvm-java-kotlin-scala-groovy-clojure-19le
- https://velog.io/@seyoung755/%EB%A9%94%EB%AA%A8%EB%A6%AC-%EB%AA%A8%EB%8D%B8%EA%B3%BC-%EA%B4%80%EB%A6%AC-%EB%B0%A9%EC%8B%9D%EC%97%90-%EB%8C%80%ED%95%98%EC%97%AC
- https://deepu.tech/memory-management-in-programming/
- JVM(Stack & Heap )
https://yaboong.github.io/java/2018/05/26/java-memory-management/
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 |