3주차 CS05 학습 내용 정리

cherrylime69·2022년 1월 23일
0

코드스쿼드

목록 보기
2/4

🙋‍♂️ 메모리 구조

2222

🙋‍♂️ 스택이란?

  • 정적 메모리 할당, 후입선출(LIFO)
  • 스택에 저장되는 모든 데이터가 유한하고 정적임 (컴파일때 크기 결정)
  • 지역 변수, 매개 변수, 리턴 값, 임시값 등이 저장
  • 지역변수는 함수가 끝나기 전까지 계속 스택에 남다가 함수가 끝나면 사라지게 된다.
  • 참조 변수는 변수가 힙에 저장된 데이터를 참조하는 포인터를 저장한다 (메모리 주소를 저장)
  • High Address -> Low Address 로 향한다
  • 포인터 크기는 32비트 운영체제에서는 4바이트 64비트 운영체제에서는 8바이트
  • 포인터에는 다음에 저장될 스택 영역의 메모리 주소가 저장된다.
  • 스택도 사실 메모리 주소를 바탕으로 지역 변수나 참조 변수 등이 저장된다 예를 들면, a = 10일 때, 0xA01에 a = 10이 저장된다

🙋‍♂️ 힙이란?

  • 동적 크기의 데이터가 저장 (런타임 때 크기가 결정). 그러므로 malloc을 통해 메모리를 직접 할당해야 함
  • 대표적으로 전역 변수와 객체, 문자열 데이터가 저장
  • Low Address -> High Address 로 향한다

🙋‍♂️ GC 이란?

자바와 코틀린에서는 JVM(자바가상머신)을 통해 가상 메모리를 OS로부터 할당받게 됩니다. 할당받은 가상 메모리는 Method 영역, Heap 영역, Stack 영역을 관리하는데 사용됩니다. 여기서 Heap영역와 Stack 영역은 앞에서 얘기했으니 생략하며, method 영역에 대해 설명하면 해당 영역은 클래스파일(가상 머신에 할당되기 전에 자바 컴파일러에 의해 자바 코드가 바이트코드로 변환된 파일)을 읽어서 분석하여 클래스에 대한 정보(데이터)를 저장하는 공간입니다.

또한 GC은 앞서 얘기한 대로 heap 영역에서 참조되지 않은 객체를 찾아 메모리를 자동으로 해제시키는 작업을 합니다.

GC는 Stop The World과 Mark and Sweep 단계를 거치는데, Stop The World 단계에서는 GC를 실행하기 위해 JVM 실행을 멈추는 작업을 합니다. 이후에 Mark and Sweep 단계를 거칩니다. Mark는 사용되는 메모리와 사용되지 않는 메모리를 식별하는 작업, Sweep은 Mark 단계에서 사용되지 않음으로 식별된 메모리를 해제하는 작업을 하여 참조되고 있지 않은 객체를 해제하여 JVM의 메모리 관리를 능동적으로 합니다.

참조

자바와-JVM-그리고-메모리-구조
JVM 구조와 자바 런타임 메모리 구조
포인터사용하기-코딩도장
바이트패딩

profile
개발자 일기

0개의 댓글