Skip to main content

Command Palette

Search for a command to run...

#performance

Articles tagged with #performance

  1. Java Zero-Copy — FileChannel.transferTo, sendfile, 그리고 Kafka가 디스크를 네트워크로 흘려보내는 방법

    "파일을 읽어서 소켓으로 보낸다." 한 줄짜리 요구사항이에요. 그런데 이 한 줄 뒤에서 데이터는 메모리를 네 번이나 복사하고, CPU는 커널과 유저 공간을 네 번이나 들락거려요. Kafka처럼 초당 수십만 건을 흘려보내야 하는 시스템에서 이 비용은 그냥 넘길 수가 없어요. 이 글은 그 복사를 한 겹씩 벗겨내는 zero-copy의 동작 원리를 따라가요. 전통

    May 15, 202617 min read
  2. Java Flight Recorder 내부 구조 — Thread-Local Buffer부터 Disk Repository까지

    JFR을 켜면 1% 미만 오버헤드로 JVM 내부가 그대로 기록돼요. 어떻게 이렇게 가벼울 수 있는지, 그리고 그 데이터가 어떤 경로를 거쳐 디스크에 쌓이는지 한 번 따라가 봐요. 이 글은 JFR을 "그냥 잘 쓰는 도구"에서 "내부 동작을 아는 도구"로 끌어올리고 싶은 분을 위한 글이에요. 운영 중인 서버에서 갑자기 응답 시간이 튀어요. 메트릭 그래프는 분

    May 15, 202614 min read
  3. Java Zero-Copy — FileChannel.transferTo, sendfile, 그리고 Kafka가 디스크를 네트워크로 흘려보내는 방법

    "파일을 읽어서 소켓으로 보낸다." 한 줄짜리 요구사항이에요. 그런데 이 한 줄 뒤에서 데이터는 메모리를 네 번이나 복사하고, CPU는 커널과 유저 공간을 네 번이나 들락거려요. Kafka처럼 초당 수십만 건을 흘려보내야 하는 시스템에서 이 비용은 그냥 넘길 수가 없어요. 이 글은 그 복사를 한 겹씩 벗겨내는 zero-copy의 동작 원리를 따라가요. 전통

    May 15, 202617 min read
  4. JVM JIT Compiler 내부 동작 — C1, C2, Tiered Compilation, 그리고 OSR

    자바 코드가 빠르게 도는 이유는 단순히 "JIT가 컴파일해주니까"가 아니에요. HotSpot은 인터프리터로 시작해서, C1으로 빠르게 한 번 컴파일하고, 다시 C2로 깊이 최적화하는 4단계 계층 구조를 거쳐요. 그 사이에는 OSR로 한참 돌고 있는 루프를 갈아끼우고, 가정이 깨지면 Deoptimization으로 다시 인터프리터로 되돌리는 정교한 안전장치가

    May 15, 202616 min read
  5. Java String 내부 구조 — Compact Strings, String Pool, 그리고 G1 String Deduplication

    매일 쓰는 String을 다시 들여다보고 싶은 백엔드 개발자를 위해 썼어요. 보통 힙 메모리의 20~30%를 차지하는 이 작은 클래스 안에서, JDK 9 이후로 어떤 일이 벌어지고 있는지 — byte[]로 바뀐 내부 표현, native StringTable, invokedynamic으로 풀린 + 연산자, GC가 똑같은 문자열을 알아서 공유해 주는 메커니즘까

    May 15, 202615 min read
  6. Java Flight Recorder 내부 구조 — Thread-Local Buffer부터 Disk Repository까지

    JFR을 켜면 1% 미만 오버헤드로 JVM 내부가 그대로 기록돼요. 어떻게 이렇게 가벼울 수 있는지, 그리고 그 데이터가 어떤 경로를 거쳐 디스크에 쌓이는지 한 번 따라가 봐요. 이 글은 JFR을 "그냥 잘 쓰는 도구"에서 "내부 동작을 아는 도구"로 끌어올리고 싶은 분을 위한 글이에요. 운영 중인 서버에서 갑자기 응답 시간이 튀어요. 메트릭 그래프는 분

    May 15, 202614 min read