No-ah98
Noah
No-ah98
전체 방문자
오늘
어제
  • 분류 전체보기 (40)
    • CS (7)
      • Java (7)
    • shell (1)
    • 개발 실수 (1)
    • 웹 (1)
    • Git (1)
    • 부트캠프 (1)
    • 링크 (0)
    • 오류 (0)
    • 일정 (0)
    • 객체지향 (4)
    • CodingTest (6)
    • TIL (2)
    • JPA (7)
    • JAVA (0)
    • 기타 (0)
    • Spring (5)
    • 알고리즘 (1)
      • 백준 (1)
      • 프로그래머스 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 중복제거
  • @RequestBody@ModelAttribute 차이
  • @PathVariable vs @RequestParam
  • 타일링
  • form 공백 체크
  • 중복문자제거
  • 깃 정리
  • 해시
  • DTOvsVO
  • @PathVariable
  • 객체지향
  • 연관관계 편의 메서드
  • @RequestBody
  • @RequestParam
  • @PathVariable vs @RequestParam 차이
  • 멋쟁이사자처럼
  • 문장 뒤집기
  • 문자 뒤집기
  • 연관관계
  • 팰린드롬
  • 백엔드 스쿨
  • 2xn타일링
  • 계층형 댓글
  • spring data jpa
  • bash shell 기본 명령어
  • @ModelAttribute
  • Javascript 공백 체크
  • 멋사 백엔드
  • 캡슐화
  • 영속성 관리
  • VO
  • 백준
  • 대댓글
  • 양방향 연관관계
  • 11726
  • @RequestBody vs @ModelAttribute
  • 문자열
  • 데이터 셋팅
  • @RestController
  • JPA
  • 멋쟁이사자처럼 백엔드 스쿨
  • @Controller
  • Git 정리
  • 프로그래머스
  • 연관관계 매핑
  • Entity
  • 연관관계 편의 메서드 필요성
  • @Controller vs @RestController
  • 엔티티 매핑
  • JPA데이터셋팅

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
No-ah98

Noah

가비지 컬렉션이란?
CS/Java

가비지 컬렉션이란?

2023. 3. 6. 13:00

가비지 컬렉션이란?

  • 자바가 실행되는 JVM 에서 사용되는 객체, 즉 Heap 영역의 객체를 관리해 주는 기능을 말합니다.
  • 사용하지 않는 객체는 메모리에서 삭제하는 작업을 GC라고 부르며 JVM에서 GC를 수행합니다.
  • 이 과정에서 stop the world 가 일어나게 되며, 이 일련 과정을 효율적으로 하기 위해서는 가비지 컬렉터 변경 또는 세부 값 조정이 필요합니다.

JVM의 메모리는 총 5가지 영역(class, stack, heap, native method, PC)으로 나뉘는데, GC는 힙 메모리만 다룹니다.

일반적으로 다음과 같은 경우에 GC의 대상이 됩니다.

  1. 객체가 NULL인 경우 (ex. String str = null)
  2. 블럭 실행 종료 후, 블럭 안에서 생성된 객체
  3. 부모 객체가 NULL인 경우, 포함하는 자식 객체

가비지 컬렉션 메모리 해제 과정은?

GC의 메모리 해제 과정

 

1. Marking

프로세스는 마킹을 호출합니다. 이것은 GC가 메모리가 사용되는지 아닌지를 찾아냅니다.

 

2. Normal Deletion

참조되지 않는 객체를 제거하고, 메모리를 반환합니다.

3. Compacting

  • 참조되지 않는 객체를 제거하고 또한 남은 참조되어지는 객체들을 묶습니다.
  • 이들을 묶음으로서 공간이 생기므로 새로운 메모리 할당 시에 더 쉽고 빠르게 진행 할 수 있습니다.

Weak Generational Hypothesis

신규로 생성한 객체의 대부분은 금방 사용하지 않는 상태가 되고, 오래된 객체에서 신규 객체로의 참조는 매우 적게 존재한다는 가설입니다.

이 가설에 기반하여 자바는 Young 영역과 Old 영역으로 메모리를 분할하고, 신규로 생성되는 객체는 Young 영역에 보관하고, 오랫동안 살아남은 객체는 Old 영역에 보관합니다.

 

Generational Gabage Collection

1. Young 영역(Yong Generation 영역)

  • 새롭게 생성한 객체의 대부분이 여기에 위치합니다.
  • 이 영역에서 객체가 사라질때 Minor GC 가 발생한다고 말합니다.

2. Old 영역(Old Generation 영역)

  • 접근 불가능 상태로 되지 않아 Young 영역에서 살아남은 객체가 여기로 복사됩니다.
  • 이 영역에서 객체가 사라질 때 Major GC(혹은 Full GC) 가 발생한다고 말합니다.

3. Permanet 영역

  • Method Area라고도 합니다. JVM이 클래스들과 메소드들을 설명하기 위해 필요한 메타데이터들을 포함하고 있습니다. JDK8부터는 PermGen은 Metaspace로 교체됩니다.

참고)

https://github.com/GimunLee/tech-refrigerator/blob/master/Language/JAVA/Garbage%20Collection.md#garbage-collection

'CS > Java' 카테고리의 다른 글

역직렬화란?  (0) 2023.03.06
직렬화란?  (0) 2023.03.06
Java의 메모리 영역은?  (0) 2023.03.06
자바 컴파일 과정  (0) 2023.03.06
JVM이란?  (0) 2023.03.06
    'CS/Java' 카테고리의 다른 글
    • 직렬화란?
    • Java의 메모리 영역은?
    • 자바 컴파일 과정
    • JVM이란?
    No-ah98
    No-ah98

    티스토리툴바