이 영역을 누르면 첫 페이지로 이동
나눔코딩 블로그의 첫 페이지로 이동

나눔코딩

페이지 맨 위로 올라가기

나눔코딩

07. 기술면접 - 자바 - 가비지 컬렉션(Garbage Collection ) 처리 방법

  • 2021.10.21 10:36
  • ∞. 기술 면접/7. 자바
공부목적으로 다른 블로그의 글을 그대로 따라치면서 작성되었습니다. 저작권 문제 시, 비공개 처리하겠습니다

JAVA 의 Garbage Collection 처리 방법

- GC(Garbage Collection) 을 수행하는 가비지 컬렉터(Garbage Collector) 가 하는 일
  1. 메모리 할 당
  2. 사용 중이 메모리 인식
  3. 미사용 메모리 인식

- Stop the World
  1. 자바 애플리케이션은 GC 실행 시 GC 실행 스레드를 제외한 모든 스레드를 멈추고, GC 완료 후 다시 스레드를 실행
     상태로 변경 (아래 코드 참고)
  2. Stop the World 는 모든 애플리케이션 스레드의 작업이 멈추는 상태
  3. 어떤 GC 알고리즘을 사용하더라도, Stop the world 불가피하며 최소화하기 위해 GC 튜닝을 진행

public  class GCTest {

    public static void main(String[] args) {

        System.gc();
    }
}

 

- 가비지 컬렉터(Garbage Collector)가 들르는영역은 Young 영역에 포함되는 Eden, Survivor , Survivor2 와 Old 영역
 > Permanent 영역은 JAVA 1.8 부터제거 되었다 -> 크기가 강제되던 영역이였는 데, 이 때문에 메모리 영역이 제한적임
 > Perm 영역 대신 Metaspace 영역이 추가되었고, Metaspace 는 Native Memory 영역으로 OS가 자동으로 크기 조절함
 > 그 결과로 이전보다 큰 메모리 영역을 사용할 수 있게 되었다
 > 참고 : https://johngrib.github.io/wiki/java8-why-permgen-removed/

- Young 영역에 있는 객체는 각 하위 영역이 가득 차면 Miner GC 가 동작하여 더 이상 참조되지 않는 객체 제거
- Old 영역에 있는 객체는 영역이 가득 차면 Major GC(Full GC)가 동작하여 더 이상 참조되지 않는 객체 제거
- 동작과정
  1. 객체를 최초 생성 시, Young 영역 중 Eden 영역에 위치
  2. Eden 영역에서 Miner GC 발생 시, 참조 중인 객체라면 Survivor 1로 이동
  3. Survivor1 에서 Miner GC 발생 시, 참조 중인 객체라면 Survivor 2로 이동
  4. Survivor2 에서 Miner GC 발생 시, 참조 중인 객체라면 다시 Survivor 1 영역으로 이동 (Survivor 1 <-> 2 반복 이동)
  5. Surivor 영역이 가득차거나 Young 영역에서 오래 살아남은 객체는 Old 영역으로 이동
      ㄴ 오래기준은 객체마다 age bit 라는 것을 가지고 있는 데 이는 Miner GC 에서 살아남은 횟수를 기록하는 값
  6. Old 영역에 있는 객체가 Major GC 가 발생했을 때, 참조여부에 따라 공간이 유지되거나 제거

저작자표시 (새창열림)

'∞. 기술 면접 > 7. 자바' 카테고리의 다른 글

09. 기술면접 - 자바 - 자바는 항상 CallByValue 이다  (0) 2021.10.21
08. 기술면접 - 자바 - 직렬화(Serializable)  (0) 2021.10.21
06. 기술면접 - 자바 - Non Static 과 Static  (0) 2021.10.21
05. 기술면접 - 자바 - OOP 의 4가지 특징과 OOP 5가지 설계 원칙  (1) 2021.10.20
04. 기술면접 - 자바 - 래퍼 클래스 (Wrapper Class)  (0) 2021.10.20

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • 09. 기술면접 - 자바 - 자바는 항상 CallByValue 이다

    09. 기술면접 - 자바 - 자바는 항상 CallByValue 이다

    2021.10.21
  • 08. 기술면접 - 자바 - 직렬화(Serializable)

    08. 기술면접 - 자바 - 직렬화(Serializable)

    2021.10.21
  • 06. 기술면접 - 자바 - Non Static 과 Static

    06. 기술면접 - 자바 - Non Static 과 Static

    2021.10.21
  • 05. 기술면접 - 자바 - OOP 의 4가지 특징과 OOP 5가지 설계 원칙

    05. 기술면접 - 자바 - OOP 의 4가지 특징과 OOP 5가지 설계 원칙

    2021.10.20
다른 글 더 둘러보기

정보

나눔코딩 블로그의 첫 페이지로 이동

나눔코딩

  • 나눔코딩의 첫 페이지로 이동

검색

메뉴

  • 홈
  • 태그
  • 방명록

카테고리

  • 분류 전체보기 (316)
    • ∞. 읽은 거리 (3)
    • ∞. 기술 면접 (61)
      • 1. 자료구조 (0)
      • 2. 네트워크 (9)
      • 3. 운영체제 (11)
      • 4. 데이터베이스 (13)
      • 5. 디자인 패턴 (0)
      • 6. 알고리즘 (0)
      • 7. 자바 (15)
      • 8. 자바스크립트 (7)
      • 9. 스프링 (5)
      • 10. 시큐리티 (1)
      • 11. 기타 (0)
      • 12. Vue (0)
    • ∞. 웹개발 유용한 사이트 (14)
    • ∞. 트러블 슈팅 + TIL (7)
    • 00. 출발 (9)
    • 01. 엑셀 (9)
      • 기초 (4)
      • 컴활 1급 (4)
      • VBA (0)
    • 02. 엑세스 (9)
      • 기초 (5)
      • 컴활 1급 (4)
    • 04. Oracle (1)
      • 기초 (1)
    • 03. JAVA (8)
      • 기초 (7)
      • 객체지향 프로그래밍 (0)
    • 05. HTML (13)
      • 기초 (1)
      • css (10)
      • sass (0)
      • less (0)
    • 06. Javascript (16)
      • 기초 (13)
      • ES6 모듈 (2)
      • Canvas (0)
    • 07. JSP (0)
      • 기초 (0)
    • 08. jQuery (0)
      • 기초 (0)
    • 09. BootStrap (1)
      • 기초 (0)
      • v4 - Layout (1)
    • 10. Spring (30)
      • 기초 (3)
      • 실험 (4)
      • MVC (1)
      • BOOT (6)
      • Security (10)
      • Lib (Library) (2)
      • 벤치마킹 (0)
      • JUnit5 (2)
      • DevTools (0)
      • Socket (1)
      • Batch (0)
      • Mobile (0)
      • WebFlux (0)
      • Cloud (0)
      • Thymleaf (0)
      • Actuator (0)
      • 성능 테스트 (1)
    • 11. JetBrains (34)
      • 기초 (1)
      • IntelliJ IDEA (33)
      • WebStorm (0)
      • Pycham (0)
    • 12. API (0)
      • 기초 (0)
      • 네이버 API (0)
      • 카카오 API (0)
      • 구글 API (0)
      • 인스타그램 API (0)
    • 13. AutoHotkey (1)
    • 14. Python (8)
      • 기초 (3)
      • Selenium (2)
      • Beautiful Soup (0)
      • openpyxl (1)
      • Pyqt5 (0)
      • Deep learning (open CV) (0)
      • Geocoder (0)
      • Anaconda (0)
      • DeepLearning (0)
      • Jupyter Nootbook (0)
    • 14.5. R (0)
    • 15. JMeter (0)
      • 다운로드 (0)
    • 16. Vue JS (23)
      • 기초 (3)
      • Vue 2 (15)
      • Vue 3 (5)
      • Vuetify 2.5.8 (0)
    • 17. Git (12)
      • 기초 (8)
      • ItelliJ IDEA (4)
      • SourceTree (0)
    • 18. AWS (5)
      • 기초 (2)
      • Jira (3)
    • 19. Naver Cloud Platform (0)
    • 20. Google Cloud Platform (0)
      • 기초 (0)
      • stt & tts (0)
    • 21. Kotlin (0)
    • 22. Android (0)
      • 기초 (0)
      • Java (0)
      • Kotlin (0)
      • Flutter FrameWork (0)
    • 23. Clean Code [JAVA] (1)
    • 24. BuildTool (1)
      • Maven (1)
      • Gradle (0)
    • 25. 자료 구조와 알고리즘 (18)
      • JAVA (1)
      • Java Script (1)
      • 프로그래머스 (0)
      • 백준 알고리즘 (0)
      • 나의 알고리즘 (14)
      • Brilliant 공부 (0)
    • 26. React (1)
      • 기초 (0)
      • 강의 정리 (1)
    • 27. PostMan (0)
      • 기초 (0)
    • 28. 프로그래머스 (9)
    • 29. Leet Code (0)
    • 30. MySQL (3)
      • 기초 (2)
      • 문제 (1)
    • 73. GraphQL (0)
    • 74. Nuxt JS (0)
    • 75. Electron (0)
    • 76. UX &amp; UI Design Tool (0)
      • 기초 (0)
      • Axure (0)
      • Sketch (0)
      • Figma (0)
    • 77. MarkDown (1)
      • 기초 (1)
    • 78. Tomcat (1)
      • 메모 (1)
    • 79. Element JS (0)
    • 80. Parallax JS (0)
      • 기초 (0)
    • 81. Player JS (0)
      • 기초 (0)
    • 82. Smart Maker (0)
    • 83. Vim (0)
      • 기초 (0)
    • 84. Linux (0)
      • 기초 (0)
      • Centos 7 (0)
      • Ubuntu (0)
    • 85. Node JS (2)
      • 기초 (1)
      • WebRTC (0)
      • NVM (1)
    • 86. Propeller JS (0)
    • 87. FullPage JS (0)
      • 기초 (0)
    • 88. 아두이노 (0)
    • 89. Tensorflow (0)
    • 90. 웹 패킷 분석 (0)
    • 91. 크롬 개발자도구 (0)
    • 92. 디자인 패턴 (7)
      • 생성(Creational) (3)
      • 구조(Structral) (1)
      • 행위(Behavioral) (2)
      • SOLID 패턴 (0)
    • 95. Linux Shell Script (0)
    • 96. 구글 애널리스틱 (0)
    • 97. ffmpeg (0)
    • 98. ShareX (1)
    • 자료실 (0)
    • 기타 (2)

최근 글

인기 글

댓글

공지사항

아카이브

태그

  • 엑셀 기본작업
  • 엑셀 표시형식
  • 졵
  • 깁
  • 엑셀 기타작업
  • 엑셀 가운데맞춤
  • 엑셀 글씨
  • 엑셀 분석작업

나의 외부 링크

  • 비전공자 개발자
  • 자바 디자인 패턴
  • 자바 디자인 패턴
  • 스프링 블로그
  • 해킹보안 & 웹 관련
  • ERD 생성
  • 전문 기술 블로그
  • Servlet에 대한 개념없이 스프링을 했네요?
  • 스프링 FitlerChainList
  • 알고리즘 파워 블로그

정보

THE HEYDAZE의 나눔코딩

나눔코딩

THE HEYDAZE

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. © THE HEYDAZE. Designed by Fraccino.

티스토리툴바