-
Process Memory AreaCS/OS 2021. 5. 27. 17:52
2021.01.17 - [Other CS/OS] - Process & Thread (OS)
Process & Thread (OS)
기본기의 중요성은 항상 느끼고 있는데요. 막상 제대로 알고 있는가 생각했을 때 그렇진 않은 것 같아 하나씩 정리합니다. Process 운영체제로부터 자원을 할당받은 작업의 단위 Thread 프로세스가
exponential-e.tistory.com
Process는 Code, Data, Heap, Stack의 영역으로 이루어져 있다는 것을 앞선 포스팅에서 알아봤습니다.
Thread에 대해서도 함께 알아봤죠.
이번에는 프로세스에 존재하는 각 영역에 대해 좀 더 자세히 알아보려 합니다.
각 영역은 프로세스의 메모리에 존재합니다.
Memory 란 기억이란 의미를 가지죠. 마찬가지로 컴퓨터에서도 기억과 관련된 일을 하는 장치를 가리킵니다.
기억장치라고 부르죠.
컴퓨터의 메모리는 수치, 명령, 데이터 등을 기억해두는데 이러한 것들이 프로세스 메모리의 각 영역에 나뉘어 존재합니다.
그림으로 표현하면 아래와 같습니다.
그림 1. 프로세스 메모리 영역 Heap과 Stack의 차이점은 확연히 구분 됩니다.
Stack은 컴파일 타임에 크기가 결정되는 정적인 크기, Heap은 런 타임에 결정되는 동적인 크기를 갖는다고 합니다.
각 영역에서 하는 일을 어느 정도 알았는데, 실제로 동작하는 것도 보면 좋을 것 같습니다.
아래와 같은 코드를 실행한 경우 메모리 상태를 자세하게 살펴 보겠습니다.
public class Main { private static final int NUMBER = 1; public static void main(String[] args) { int local = 12; local = shift(local); print(local); } private static int shift(int target) { int loop = 2; while(loop-- > 0) { target <<= 1; } return target; } private static void print(int target){ String statement = " 입니다."; System.out.println(NUMBER + ". " + target + statement); } }
코드를 메모리 내 동작으로 살펴보겠습니다.
우선 프로그램 실행과 동시에 정적(전역) 변수인 NUMBER가 Data 영역에 담깁니다.
JVM 구조에선 Method area로 볼 수 있겠습니다.
참고로 JVM의 Heap, Method area는 모든 스레드가 공유해 사용합니다.
이후 메인 메서드가 실행되며 Stack 영역에 담깁니다.
그리고 각 메서드가 호출되고, 완료되며 Stack 영역에 담기고 해제됩니다.
최종적으로 완료되면 Stack에 존재하던 모든 메서드 및 지역/전역 변수는 제거됩니다.
또한, 진행 도중 동적 메모리 할당이 발생하는 경우는 Heap 영역으로 저장됩니다.
이 과정을 그림으로 표현하면 아래와 같습니다.
그림 2. 메모리에서 코드 진행 과정 코드에서 String은 new로 생성하진 않았지만, 자바의 String 특성상 Heap에 올라갑니다.
정확히는 literal로 선언된 String은 아래와 같은 방식으로 선언됩니다.
- String statement = new String(char[]);
- statement = statement.intern();
관련 내용은 문자열 포스팅을 참고해 주세요.
이외에도 배열, 맵, 컬렉션 등의 자료 구조는 Heap 영역에 존재하겠죠.
해당 문자열은 지속적인 참조가 되지 않는 경우 GC로 처리됩니다.
GC는 그냥 메모리 관리를 자동으로 해준다 정도로 인식하시면 될 것 같습니다.
또한, 자바에선 Heap 영역의 동적할당 메모리 관리를 GC가 대신해주기 때문에 위의 설명과는 약간 다릅니다.
이렇게 메모리 내의 영역은 각각 맡은 역할이 상이합니다.
특히, Heap, Stack의 비교 관련한 이야기는 많이 나오니 확실하게 알아두면 좋겠습니다.
위 내용은 자바 코드를 기반으로 예시를 든 것이기 때문에 JVM 구조와 정확하게 맞아 떨어지진 않습니다.
참고만 하시고 관련 공부하시는데 조금이나마 도움이 되시길 바랍니다.
관련 내용에서 잘못된 부분은 댓글로 지적해주시면 피드백 및 수정하겠습니다. 감사합니다.
반응형'CS > OS' 카테고리의 다른 글
Multi Threaded Programming (0) 2021.02.18 Process State & Scheduling (0) 2021.01.31 Process & Thread (OS) (0) 2021.01.17