PloCS

메모리구조 (+Java)

PLO_98 2022. 3. 22. 12:30

출처 : https://hyos-inside.tistory.com/18


- Code(Text) 영역 -

Code 영역은 코드가 저장되는 영역이다.

Code영역에 저장되는 코드들을

 Cpu가 하나씩 가져가서 처리하게된다.


- 데이터(data) 영역 -

프로그램의 전역(global) , 정적(static) 변수가 저장되는 영역이다.

프로그램의 시작과 동시에 할당 , 종료와 동시에 소멸된다.

프로그램의 시작부터 끝까지 메모리에 존재하는 영역이다.

 

= java =

-메서드 영역(method)-

JVM이 실행되며 생기는 영역

class정보 , 전역변수 , 정적(static) 변수

 

-RumTimeConstantPool-

상수 정보가 저장되는 공간


- 힙(heap) 영역 -

사용자가 필요할 때 마다 직접 사용하고 관리하는 영역.

데이터의 크기가 확실하지 않고 변동이 있을 때 

사용자가 직접 사용 및 관리한다.

메모리의 낮은 주소에서 높은 주소 방향으로 할당된다.

heapOverflow : heap메모리가 가득차 stack의 영역을 침범함

 

= java =

Obeject Type Data 저장 (Array , Set)

어플리케이션의 모든 부분 중 stack을 제외한 부분

메모리 영역 자동관리되지 않는다 , JVM = GC작동.

String test = "test" 			 
test += "new test"

새로운 heap 영역에 합쳐진 test = "test new test" 할당

처음 선언한 test는 Unreachable Object가 된다.

GC는 Unreachable Object를 찾아 제거함으로써 Heap영역의 메모리를 관리

- Unreachable Object -

stack에 도달할 수 없는 객체


- 스택(stack) 영역 -

함수(method)의 호출과 동시에 지역변수 , 매개변수가 할당

함수의 호출이 끝나면 소멸

스택 영역에 저장되는 함수의 호출 정보를 StackFrame이라 하고

Last In First Out 방식에 따라 동작,

가장 늦게 저장된 데이터 - > 가장 먼저 출력

data의 저장은 push , 데이터의 출력은 pop

메모리의 높은 주소에서 낮은주소 방향으로 할당됩니다.

StackOverflow : stack메모리가 가득차 heap의 영역을 침범함

 

= java =

원시타입 데이터들이 저장(int , byte , double ,boolean)

Object Type 데이터들의 상속값 

함수가 호출될 때 사용되는 메모리 , 함수의 기능수행이 끝나면 자동 반환