Java GC & Equality & Override/Overload

2023. 4. 2. 09:06·📘 Backend/Java

📘 Garbage Collector

  • 힙 영역에서 사용하지 않는 객체들을 제거하는 작업
  • 이 작업이 필요한 이유는 개발자가 메모리를 직접 해제할 수 없는 언어이기 떄문

동작 방식
  • 간단한 Serial GC 방식으로 설명함
  • 좀 더 진보된 GC는 G1 GC, ZGC가 있으며 이 문서에선 다루지 않음

Garbage Collection
  • Minor GC, Major GC로 구분된다
  • Minor GC는 young 영역, Major GC는 old 영역에서 일어난다고 정의함
  • GC를 수행할 때는 GC를 수행하는 스레드 이외의 스레드는 모두 정지함
    이를 Stop-the-world 라고 한다
  • Minor GC는 Eden 영역이 가득 참으로부터 시작된다
  • Eden 영역에서 참조가 남아있는 객체를 Mark하고 Survivor 영역으로 복사한다
  • 그리고 Eden 영역을 비운다
  • Survivor 영역도 가득차면 같은 방식으로 다른 Survivor 영역에 복사하고 비운다
  • 이를 반복하다 보면 계속해서 살아남는 객체를 old 영역으로 이동한다
  • Major GC는 old 영역에서 일어나며 위와 반대로 삭제되어야 하는 객체를 Mark 한다
  • 그리고 지움
  • 메모리는 단편화 된 상태이므로 이를 한 군데에 모아주는것을 Compaction이라고 함
  • 그래서 Mark-Sweep-Compact 알고리즘이라고도 한다

Garbage Collection이 중요한 이유

GC 수행 시 시스팀에 멈추기 때문에 의도치 않은 장애의 원인이 될 수 있다

따라서 이를 위해 힙 영역을 조절하는 GC 튜닝이 가능하며,
JVM 메모리는 절대 마음대로 조정해선 안된다


📘 메서드 오버라이딩의 조건

메서드 오버라이딩이란?

부모 클래스에서 이미 정의된 메서드를 자식 클래스에서 재정의 하는 것

  • 자바에서 자식 클래스는 부모 클래스의 private 멤버를 제외한 모든 메서드를 상속받는다
  • 이렇게 상속받은 메서드는 그대로 사용해도 되고, 재정의하여 사용해도 됨

오버라이딩의 조건

  • 메서드의 동작만을 재정의하는 것이므로, 메서드의 선언부는 기존과 완전히 같아야 함
  • 부모 클래스의 메서드보다 더 좁은 범위의 접근 제어자 지정 불가 (ex: protected -> private)
  • 부모 클래스의 메서드보다 더 큰 범위의 예외 선언 불가 (ex: IllegalException -> RuntimeException)

📘 Overloding & Overriding

Overloding
  • 같은 클래스 내에서 동일한 메서드 이름을 가지지만 매개변수의 타입, 개수가 다르게
    구현될 수 있는것을 의미하며 컴파일 타임 다형성이기도 하다

Overriding
  • 상위 클래스의 메서드를 재정의 하는것을 의미하며, 런타임 다형성이기도 하다
  • @Override 를 써야하는 이유
    • 컴파일 타임에 오버라이딩에 대한 안정성을 부여하므로 왠만하면 꼭 쓰자

📘 Access Modifier

  • private, default, protected, public 이 있다
  • 외부로 노출될 데이터를 선택적으로 제공하기 위함이며, 캡슐화와 통하는 면이 있다
  • private - 해당 클래스 내부에서만 접근 가능
  • default - 해당 패키지에서만 접근 가능
  • protected - 상속한 클래스에서만 접근 가능
  • public - 전체 영역에서 접근 가능
저작자표시 (새창열림)

'📘 Backend > Java' 카테고리의 다른 글

Java Serializable & Parsing  (2) 2023.10.02
Java Thread  (0) 2023.04.02
Java Object Mapper & Type Casting  (0) 2023.04.02
Java Stream  (0) 2023.04.02
Java Lambda Expression  (0) 2023.04.01
'📘 Backend/Java' 카테고리의 다른 글
  • Java Serializable & Parsing
  • Java Thread
  • Java Object Mapper & Type Casting
  • Java Stream
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      React #Markdown
      Lock #Thread #Concurrency
      GStreamer #Pipeline
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    Java GC & Equality & Override/Overload
    상단으로

    티스토리툴바