life is egg

[JAVA] G..C 본문

개인공부/JAVA

[JAVA] G..C

삶은계란진재혁 2023. 10. 19. 01:00

 12월 .. 까지만 다니겠습니다..

 

아니 왜..?!

 

개..개..개발자가 하고싶습니다..


일주일 전의 팀장님과 나의 대화..

 

물론 아직도 결론은 애매하다... 


그러다 오늘 팀장님이랑 이야기하다가 메모리 관리의 중요성을 ..설명듣다가

 

자바는 GC가 해줘서 좋다는 말을 꺼내버린 나...... 

 

그렇게 시작된 ..무튼.. 무튼...GC 공부를 해야겠다..!

...

 


가비지 컬렉션(Garbage Collection)

" 메모리 관리 기법 중의 하나로, 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능이다."

 

Java 에서는 JVM의 GC가 해주고있다.

 

JVM

더보기

자바 가상머신.. 

하는 일은 자바와 운영체제간의 중개자역할이다.. JVM은 운영체제에 종속적..!  

특이점은 스택기반이라는것. 

JVM 구조는

  • Class Loader / Execution Engine / Garbage Collector
    • Runtime Data Area
      • Method Area
      • Heap Area
      • Stack Area
      • PC register
      • Native Method Stack

? Execution Engine 인터프린터 방식이랑 JIT? 방식...??

https://steady-coding.tistory.com/305

-

Garbage Collector 는 힙메모리 영역에 생성된 객체들 중 참조 되지 않은 객체를 탐색후 제거..

 

Heap area

더보기

힙영역은 모든 쓰레드가 공유, 인스턴스와, 배열이 생성되는 영역이다. 인스턴스는 메소드 영역에 로드된 클래스만 인스턴스화 가능..

-

Java 8기준 객체의 생존 기간에 따라 물리적 heap 영역을 나누었다  , 대부분의 객체는 금방 Unreachable 상태가됨.

Young  & Old

.Yong Generation

    새롭게 생성된 객체가 할당됨

    이 영역에 대한 GC를 Minor GC

    3개의 영역으로 구분 Eden x 1 , Survivor x 2

 

Old Generation

  Yong Generation의 생존자들... 의.. 복사본?! Promotion

   이 영역에 대한 GC를 Major GC

 

또한 Card Table이라는 영역이 존재...

   Old 영역의 객체가 Yong 영역의 객체를 참조할 때...그에 대한 정보를 표시

  

동작방식

1. Stop The world

   GC동안에... 세상이 멈춘다...== GC실행하는 쓰레드를 제외한 모든 쓰레드 작업이 중단 == 애플리케이션 실행이 멈춘다..

  GC 튜닝을 한다고하면 이 과정을 튜닝한다고해~

2. Mark and Sweep

  Mark : 사용 하는거 체크만한다

  Sweep : 체크안한 것들 청소

 

* Minor GC == Young 영역 GC 동작방식 

  Eden 영역이 꽉차면 Minor GC작동, 사용되지 않는 메모리는 해제, 사용중인 객체는 Survivor 영역으로 이동

  이과정이 반복... 하나의 Survivor 영역이 다 찬다면, Suvivor 영역의 생존 객체를 다른 Survivor 영역으로 이동.

  이과정중 Object Header에 살아남은 횟수를 기록,, Minor GC때 Header에 기록된 횟수를 보고 Promotion 여부 판단 

 

* Major GC == Old 영역 GC 동작방식

  Promotion 이 누적되어 Old 영역의 메모리가 부족해지면 발생...

 

 


요약의 요약의 요약 

 

 

[Java] Garbage Collection(가비지 컬렉션)의 개념 및 동작 원리 (1/2)

1. Garbage Collection(가비지 컬렉션)이란? [ Garbage Collection(가비지 컬렉션)이란? ] 프로그램을 개발 하다 보면 유효하지 않은 메모리인 가바지(Garbage)가 발생하게 된다. C언어를 이용하면 free()라는 함

mangkyu.tistory.com

 

 

 

틈틈히 읽어볼것..?!

https://www.oracle.com/technetwork/java/javase/memorymanagement-whitepaper-150215.pdf

 

 

더알고싶은건 ... GC튜닝..

'개인공부 > JAVA' 카테고리의 다른 글

Java의 synchronized  (3) 2024.11.19
[JAVA] 배열의 최대 크기  (0) 2023.07.30
[JAVA] sort... 그 무언가..  (0) 2023.06.19
Comments