개발일지

2024.03.26 TIL

과일바구니♡ 2024. 3. 26. 21:00

1. 스프링)기술면접질문

1)Garbage Collector의 역할, 원리, 알고리즘에 대해 아는 만큼 설명해주실 수 있을까요?

가비지 컬렉터(GC)는 자바 가상 머신(JVM) 내에서 메모리 관리를 담당하는 중요한 시스템입니다. 프로그램이 동적으로 할당한 메모리 영역 중에서 더 이상 사용되지 않는 부분을 자동으로 찾아내어 해제함으로써, 메모리 누수를 방지하고 효율적인 메모리 사용을 가능하게 합니다.

 

가비지 컬렉터의 역할

메모리 해제: 더 이상 참조되지 않는 객체를 메모리에서 해제합니다.메모리 재활용: 해제된 메모리를 다시 사용 가능한 상태로 만듭니다.

가비지 컬렉터의 원리

참조 카운팅: 객체에 대한 참조 횟수를 기록하고, 참조 횟수가 0이 되면 가비지로 간주합니다. 하지만, 순환 참조 문제로 인해 자바에서는 주로 사용되지 않습니다.가능 도달성 분석(Reachability Analysis): GC Root로부터 시작하여 참조를 따라가며 도달할 수 있는 객체를 찾아내고, 도달할 수 없는 객체를 가비지로 판단합니다. 

 

가비지 컬렉터의 알고리즘

Mark and Sweep: 객체를 마킹하고, 마킹되지 않은 객체를 수집하는 방식입니다.Stop and Copy: 사용 중인 메모리를 다른 곳으로 복사한 뒤, 남은 메모리를 한 번에 정리합니다.Generational Collection: 객체의 생존 기간에 따라 여러 세대(Young, Old Generation 등)로 나누어 관리합니다. 대부분의 객체는 생성 후 금방 소멸되므로, Young Generation에서 빈번하게 가비지 컬렉션을 수행하고, Old Generation은 덜 자주 수행합니다.G1 GC, ZGC, Shenandoah GC: 더 빠르고 효율적인 가비지 컬렉션을 위해 개발된 최신 알고리즘입니다. 

 

가비지 컬렉터는 자바 프로그램의 효율적인 메모리 관리를 위해 필수적인 요소입니다. 다양한 알고리즘과 전략을 통해 메모리를 최적화하며, 개발자는 가비지 컬렉터의 동작 방식을 이해함으로써 보다 효율적인 프로그램을 작성할 수 있습니다.

 

2)Java Map의 내부 구현은 어떻게 이루어져 있을지 추측해보실 수 있을까요?

Java의 Map 인터페이스는 키와 값을 연결하는 자료구조를 제공합니다. 이는 여러 클래스에 의해 구현될 수 있으며, 그 중 대표적인 것으로는 HashMap, TreeMap, LinkedHashMap등이 있습니다. 각각의 구현체는 내부적으로 다른 방식을 사용하여 키-값 쌍을 저장하고 관리합니다.

 

Map 인터페이스의 주요 구현체들

-HashMap: 해시 테이블을 사용하여 키-값 쌍을 저장합니다. 키에 대한 해시 코드를 계산하고, 이를 사용하여 데이터를 저장하고 검색하는 방식으로 작동합니다. 이 구조는 빠른 검색 속도를 제공하지만, 순서는 보장되지 않습니다. 3TreeMap: 레드-블랙 트리 기반의 구조를 사용하여 키-값 쌍을 저장합니다. 이는 정렬된 순서로 키-값 쌍을 유지하며, 키에 대한 비교 방식을 기반으로 합니다. 따라서 검색, 삽입, 삭제 작업이 로그 시간 복잡도를 가집니다.LinkedHashMap: 해시 테이블과 연결 리스트를 결합한 형태로, 삽입 순서 또는 접근 순서를 유지합니다. 이는 HashMap의 장점에 순서가 보장된다는 추가적인 특성을 가집니다.

 

Map 인터페이스의 내부 구현 방식

-해시 테이블: HashMap과 LinkedHashMap은 내부적으로 해시 테이블을 사용합니다. 키의 해시 코드를 계산하여 해당 해시 코드에 해당하는 버킷에 키-값 쌍을 저장합니다. 충돌이 발생할 경우, 연결 리스트나 트리 구조를 사용하여 충돌을 해결합니다.트리 구조: TreeMap은 레드-블랙 트리를 사용하여 키-값 쌍을 저장합니다. 이 구조는 자동으로 균형을 유지하며, 키에 대한 정렬 순서를 보장합니다.

Java의 Map 인터페이스와 그 구현체들은 다양한 내부 구현 방식을 통해 효율적인 데이터 저장과 검색 기능을 제공합니다. 각 구현체는 사용하는 상황과 요구 사항에 따라 선택할 수 있으며, 이를 통해 Java 애플리케이션의 성능과 효율성을 최적화할 수 있습니다.

'개발일지' 카테고리의 다른 글

2024.03.28TIL  (0) 2024.03.28
2024.03.27 TIL  (0) 2024.03.27
2024.03.25 TIL  (0) 2024.03.25
2024.03.22 TIL  (0) 2024.03.22
2024.03.21TIL  (0) 2024.03.21