Study
-
[카프카] 카프카는 어떻게 고성능을 유지할까?Study/카프카 핵심 가이드 2025. 3. 24. 23:11
카프카는 디스크 기반 보존을 사용해 데이터 유실 위험을 줄인다.그렇다면 카프카는 디스크 기반 보존을 하는데 어떻게 고성능을 유지할까? 신규 컨슈머가 추가되었을 때 이전 오프셋부터 데이터를 불러오는 경우도 있다.이때 캐시에 데이터가 없을 수 있는데 이런 경우에도 어떻게 고성능을 낼 수 있을까? 1. append-only와 sequential write카프카는 로그 형식으로 데이터를 기록하는데, 이때 append-only로 파일의 끝에 연속적으로 쓴다.카프카는 파티션을 세그먼트 단위로 나누고 세그먼트는 디렉토리 내 하나의 파일 형식 - 참고즉, 파일 중간을 수정하거나 임의 위치에 쓰지 않으므로, 항상 마지막에 순차적으로 write함디스크에 저장할 때 가능한 연속적인 블록에 저장한다. 이를 통해 순차 I/O가..
-
[컴퓨터 밑바닥의 비밀] 6. 입출력Study/컴퓨터 밑바닥의 비밀 2025. 3. 24. 00:00
CPU는 어떻게 입출력 작업을 처리할까?입출력 작업을 어떻게 요청하고 결과를 어떻게 전달받을까?CPU 내부에 레지스터가 있는 것과 마찬가지로, 장치에도 자체적인 레지스터인 장치 레지스터(device register)가 있음장치 레지스터는 주로 장치에 관련된 일부 정보를 저장하고, 다음 두 가지 레지스터가 있음데이터를 저장하는 레지스터ex) 사용자가 키보드의 키를 누르면 그 정보는 이런 레지스터에 저장됨제어 정보와 상태 정보를 저장하는 레지스터레지스터를 읽고 쓰는 작업을 이용해 장치를 제어하거나 장치 상태를 볼 수 있음장치에서 생성된 데이터를 얻거나 장치를 제어하는 작업은 모두 이런 레지스터를 읽고 쓰는 것으로 함 Q. 어떻게 장치 레지스터를 읽고 쓸까?아래 두 가지 방식을 사용함특정 입출력 기계 명령어를..
-
[JVM] 가비지 컬렉터와 메모리 할당 전략 (2) - 클래식 가비지 컬렉터 > G1 GCStudy/JVM 밑바닥까지 파헤치기 2025. 3. 18. 00:25
G1 컬렉터(가비지 우선 컬렉터)JDK 9부터 default gc 힙 메모리 레이아웃부분 회수(partial collection)와 리전(region)을 회수 단위로 하는 메모리 레이아웃 적용힙 메모리의 어느 곳이든 회수 대상에 포함할 수 있음이를 회수 집합(collection set)이라 하며 CSet이라 함어느 세대에 속하느냐가 아니라 '어느 영역에 쓰레기가 가장 많으냐'와 '회수했을 때 이득이 어디가 가장 크냐'가 회수 영역을 고르는 기준이 됨 (G1의 Mixed GC 모드)영역 기반 힙 메모리 레이아웃이 정지 시간 예측 모델 구현을 가능하게 함G1도 여전히 세대 단위 컬렉션 이론에 기초하고 있지만, 힙 메모리 레이아웃은 다른 컬렉터와 다름크기와 수가 고정된 세대 단위 영역 구분이 아닌, 연속된 자..
-
[JVM] 가비지 컬렉터와 메모리 할당 전략 (2) - 클래식 가비지 컬렉터Study/JVM 밑바닥까지 파헤치기 2025. 3. 18. 00:23
클래식 가비지 컬렉터 *신세대용1. 시리얼 컬렉터가장 기초적이고 오래된 컬렉터, JDK 1.3.1 전까지 핫스팟 가상 머신의 구세대용 컬렉터로는 유일한 선택지였음'단일 스레드'로 동작하나의 GC 스레드가 모두 처리한다.GC가 시작되면 '회수가 완료될 때까지 다른 모든 작업 스레드가 멈춰 있어야 한다'특징시리얼 컬렉터는 최신 JDK에서도 꾸준히 지원하고 있음다른 컬렉터의 단일 스레드 알고리즘보다 간단하고 효율적이라는 이점이 있음가용 메모리가 적은 환경에서는 알고리즘 자체가 요구하는 메모리 사용량이 가장 적음 단일 코어 프로세서 또는 코어 수가 적은 환경이라면 시리얼 컬렉터는 스레드 상호 작용에 의한 오버헤드가 없음-XX:+UseSerialGC 매개변수 추가하여 사용 가능 2. 파뉴 컬렉터여러 스레드를 활용..