📘 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 |