Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
Archives
Today
Total
관리 메뉴

forest_moon

JVM 메모리의 구조(코드, 데이터, 힙, 스택 영역) 본문

이것저것

JVM 메모리의 구조(코드, 데이터, 힙, 스택 영역)

rokga 2023. 2. 3. 22:48

프로그램의 실행 순서

 

1. 사용자가 프로그램 실행을 요청
2. 프로그램의 정보를 읽고 메모리에 로드한다. 

3. CPU는 프로그램 코드를 가져다 메모리를 관리하고 명령문을 실행한다.

4. 동적메모리가 할당되면 FreeStore 영역을 사용한다 ( 아래쪽으로 이동)

5. 스택메모리가 할당되면 FreeStore 영역을 사용한다 (위쪽으로 이동)

 

위 와 같이 프로그램이 실행되기 위해서는 운영체제(OS)가 프로그램의 정보를 메모리에 로드 해야하고 , 또한 프로그램이 실행되는 동안

CPU가 코드를 처리하기 위해서는, 메모리가 명령어와 데이터들을 저장해야 한다.

프로그램이 운영체제(OS)로 부터 할당받는 대표적인 
메모리 공간 코드(code) 영역, 데이터(data) 영역, 힙(heap) 영역, 스택(stack) 영역으로 구성되어 있다.

 

 

코드(code) 영역

메모리의 코드(code) 영역은 실행할 프로그램의 코드가 저장되는 영역으로 텍스트(code) 영역이라고도 부릅니다.

CPU는 코드 영역에 저장된 명령어를 하나씩 가져가서 처리하게 됩니다.

프로그램이 시작하고 종료될 때 까지 메모리에 계속 남아있다.

 

데이터(data) 영역

메모리의 데이터(data) 영역은 프로그램의 전역 변수와 정적(static) 변수가 저장되는 영역입니다.

데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸한다.

 

힙(heap) 영역

힙 영역과 스택 영역

메모리의 힙(heap) 영역은 개발자가 직접 공간을 할당, 해제 하는 메모리 공간입니다. 

힙 영역에서 malloc() 또는 new 연산자를 통해 메모리를 할당하고 , free() 또는 delete 연산자를 통해 메모리를 해제 한다.

힙 영역은 선입선출(FIFO , first in first out)의 방식으로 , 가장 먼저 들어온 데이터가 가장 먼저 인출 된다.

이러한 이유는 힙 영역이 메모리의 낮은 주소에서 높은 주소의 방향으로 할당되기 때문입니다.

그림을 설명하면 ,위(낮은주소) 부터 차곡차곡 아래(높은 주소) 방향으로 데이터가 쌓이는 것이다.

 

스택(stack) 영역

스택 영역은 프로그램이 자동으로 사용하는 임시 메모리 영역이다. 

함수 호출 시 생성되는 지역변수 와 매개 변수가 저장되는 영역이고, 함수 호출이 완성되면 사라진다. 

이때 스택영역에 저장되는 함수의 호출 정보를 스택 프레임(stack frame) 이라고 한다. 

스택영역에서는 푸시(push) 로 데이터를 저장하고 , 팝(pop)으로 데이터를 인출한다.

 스택 영역은 후입선출(LIFO , Last in First Out) 의 방식이며 , 가장 나중에 들어온 데이터가 가장 먼저 인출된다. 

이는 스택 영역이 메모리의 높은 주소에서 낮은 주소의 방향으로 할당되기 때문이다.

위 그림에서 힙영역과 반대로 아래(높은주소) 부터 위로(높은주소)의 방향으로 데이터가 쌓인다.

 

 

힙 영역

  • 메모리를 프로그래머가 관리 해줘야한다( 변수를 할당하고 해제해야함)
  • 메모리의 크기 제한이 없음
  • 동적 메모리를 할당 받음 (변수는 C언어 realloc() 또는 자바 new를 사용)
  • delete를 사용하여 해당 객체의 메모리를 반환한다
  • 스택영역보다 느린 엑세스
  • 변수는 전역적으로 액세스 할 수 있다

스택 영역

  • 빠른 엑세스 ( 힙보다빠름)
  • 함수의 호출하는 위치도 저장
  • 스택의 크기가 제한된다(OS 마다 조금씩 다름)
  • 잠깐 사용하고 삭제하는 데이터 저장(지역변수, 매개변수)
  • 객체가 정의된 블록을 벗어나면 소멸된다.

 

 

 

Reference

https://all-young.tistory.com/17

https://akdl911215.tistory.com/338

http://www.tcpschool.com/c/c_memory_structure

'이것저것' 카테고리의 다른 글

OAuth2.0 이란  (0) 2023.02.14
SQL 과 NOSQL  (0) 2023.02.10
쿠버네티스란 ?  (0) 2023.01.09
알고리즘-이진탐색(Binary Search)  (0) 2023.01.08
시간 복잡도(Time Complexity) 와 공간 복잡도(Space Complexity)  (1) 2023.01.05