Memory Structure <JAVA>

채상혁·2022년 5월 30일
0

자바의 메모리 구조를 설명하기에 앞서 자바 언어의 특징인 플랫폼 독립적을 이야기 하겠습니다.

자바언어는 "OS에 구분되지 않고 동작한다" 이것이 JVM 덕분입니다.
JVM은 자바의 바이트 코드를 실행하 수 있게 해주는 주체이여 OS뿐만 아니라 CPU에도 구애받지 않고 실행됩니다.


출처 : https://www.guru99.com/java-virtual-machine-jvm.html

Memory 영역인 Runtime Data Area를 기반으로 하여 Execution Engine, Class Loader, Garbage Collector가 있습니다.

  • JAVA의 Stack 과 Heap
  1. Stack
  2. Heap

stack의 경우 정적으로 할당된 메모리 영역입니다. 원시타입의 데이터값이 할당이 되고 Heap 영역에 생성된 Object 타입의 데이터의 참조값이 할당 됩니다.
Stack 의 메모리는 Thread당 하나씩 할당 됩니다. 새로운 Thread가 생성되면 Stack이 새롭게 생성되고 각 Thread끼리는 Stack 영역을 접근할 수 없습니다.

Heap의 경우 동적으로 할당된 메모리 영역입니다.
Heap 영역에서는 모든 Object타입의 데이터가 할당 됩니다. Heap 영역의 Object를 가리키는 참조변수가 Stack의 할당됩니다.
Heap 영역의 데이터는 Life-Cycle이 길다 그 이유는 Object의 크기가 크고 서로 다른 코드블럭에서도 공유가 됩니다.
Heap은 Stack처럼 Thread마다 하나씩 있는것이 아니라 여러개의 Thread가 있어도 Heap은 단 하나의 영역만 존재한다.

간단히 말해서 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역 스택 영역의 크기는 컴파일 시에 결정 스택 영역은 함수의 호출과 함께 할당되며, 함수의 호출이 완료되면 소멸. LIFO

힙 영역에 대해서 설명하자면 주로 긴 생명주기를 가지는 데이터들이 저장된다.
대부분의 오브젝트는 크기가 크고, 서로 다른 코드블럭에서 공유되는 경우가 많기 때문에 stack에 있는 데이터를 제외한 부분.

참조

0개의 댓글