메모리구조 (+Java)
- 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 데이터들의 상속값
함수가 호출될 때 사용되는 메모리 , 함수의 기능수행이 끝나면 자동 반환