전체 글
-
[JVM] 가비지 컬렉터와 메모리 할당 전략 (1) - 기본 알고리즘Study/JVM 밑바닥까지 파헤치기 2025. 3. 17. 00:20
들어가기 전,가비지 컬렉션이 처리해야 하는 문제 3가지어떤 메모리를 회수해야 할까?언제 회수해야 할까?어떻게 회수해야 할까?'메모리 할당과 회수'라고 할 때의 메모리는 런타임 데이터 영역 중 힙 영역과 메서드 영역들만 지칭함프로그램이 어떤 객체를 생성할지, 얼마나 많이 만들지는 오직 런타임에만 알 수 있음해당 메모리 영역들의 할당과 회수는 동적으로 이루어짐가비지 컬렉터는 이런 영역을 관리하는 데 집중함나머지 영역(스택 영역, 프로그램 카운터 레지스터)들은 메서드가 끝나거나 스레드가 종료되면 자연스럽게 회수됨 객체 생존 판단 알고리즘가비지 컬렉터가 힙을 청소하려면 가장 먼저 어떤 객체가 살아 있고, 어떤 객체가 죽었는지 판단해야 함 1. 참조 카운팅 알고리즘자바에서는 해당 알고리즘을 사용하지 않음 특징객체..
-
[JVM] 자동 메모리 관리 - 자바 메모리 영역과 메모리 오버플로우Study/JVM 밑바닥까지 파헤치기 2025. 3. 15. 20:10
1. 런타임 데이터 영역 -> 자바 프로그램 실행 동안 필요한 메모리 영역JVM은 자바 프로그램을 실행하는 동안 필요한 메모리를 몇 개의 데이터 영역으로 나눠 관리함이 영역들은 각각 목적과 생성/삭제 시점이 있음 1.1 프로그램 카운터바이트코드 인터프리터는 카운터의 값을 바꿔 다음에 실행할 바이트코드 명령어를 선택하는 식으로 동작프로그램의 제어 흐름, 분기, 순환, 점프 등을 표현하는 것JVM에서의 멀티스레딩은 CPU 코어를 여러 스레드가 교대로 사용하는 방식으로 구현되므로, 각 코어는 한 스레드의 명령어만 실행하게 됨스레드 전환 후 이전에 실행하다 멈춘 지점을 정확하게 복원하려면 스레드 각각에는 고유한 프로그램 카운터가 필요함각 스레드의 카운터는 서로 영향을 주지 않는 독립된 영역에 저장됨이 메모리 영..
-
[컴퓨터 밑바닥의 비밀] 3.3 스택 영역: 함수 호출은 어떻게 구현될까?Study/컴퓨터 밑바닥의 비밀 2025. 3. 9. 17:30
스택 프레임 및 스택 영역프로세스의 스택 영역에 스택 프레임(호출 스택)이 생성됨프로세스의 스택 영역의 높은 주소가 맨 위에 있고 스택 영역은 낮은 주소 방향을 커짐스택 영역이 차지하는 메모리는 함수 호출 깊이에 따라 증가하고 함수 호출이 완료될수록 감소함 함수 점프와 반환은 어떻게 구현될까?함수 A가 함수 B를 호출하면, 제어권이 함수 A -> 함수 B로 옮겨짐제어권: 실제로 CPU가 어떤 함수에 속하는 기계 명령어를 실행하는지제어권이 이전될 때는 다음 두 가지 정보가 필요함반환(return): 어디에서 왔는지에 대한 정보 (다시 돌아갈 정보)점프(jump): 어디로 가는지에 대한 정보함수 A가 함수 B를 호출할 때 알아야 하는 정보함수 A의 기계 명령어가 어디까지 실행되었는지(어디에서 왔는지)함수 B..
-
[카프카 핵심 가이드] CH7. 신뢰성 있는 데이터 전달Study/카프카 핵심 가이드 2025. 3. 9. 15:44
✅ 주요 내용신뢰성 보장의 의미카프카의 복제 메커니즘과 이것이 시스템의 신뢰성에 어떻게 영향을 미치는지서로 다른 활용 사례에 대해 카프카의 브로커와 토픽들을 어떻게 설정해줘야 하는지서로 다른 신뢰성 상황에서 클라이언트들(프로듀서와 컨슈머)을 어떻게 사용해야 하는지시스템의 신뢰성을 검증하는 방법 브로커는 메시지 저장, 프로듀서는 메시지 전송, 컨슈머는 메시지 수신(오프셋 커밋)에 대한 책임을 가지고 있다.따라서 각 관점에서 어떤 설정을 통해 신뢰성을 높일 수 있는지 생각하면 된다. 7.1 신뢰성 보장카프카가 제공하는 보장을 알면, 실패 상황에서 시스템이 어떻게 작동하는지 알 수 있음카프카는 무엇을 보장할까?파티션 안의 메시지들 간에 순서를 보장한다.만약 메시지 A 다음에 B가 쓰여졌고, 동일한 프로듀서가 ..