IT 로드맵백엔드 대본영자바 수련각이다.

수련각은 언어와 런타임을 맡는다. 자바 문법으로 짠 것이 어떻게 기계에 닿는지 — javac가 무엇을 만들고, JVM이 그것을 어떻게 읽고, 스택과 힙에서 무슨 일이 벌어지는지가 여기 있다.

지금 이 구역에서 끝낸 수련은 하나다.


익힌 것 — java Hello 한 줄을 8단계로 따라갔다

Study · JDKjava Hello 한 줄이 화면에 글자를 찍기까지를 여덟 토막으로 잘라, 단계마다 버튼으로 한 스텝씩 넘기며 보는 페이지다. 글로 읽고 끝나는 것이 아니라 그 자리에서 값이 움직이는 것을 본다.

값의 출처는 내 컴퓨터의 JDK 21.0.10 실측과 JDK 27 소스다. 지어낸 숫자가 없다.

단계 무엇을 보나 남는 것
1 · 왜 JDK는 왜 있나 .class 한 벌이 OS별 JVM 셋으로 퍼진다
2 · 컴파일 .java.class가 되기까지 토큰 → 나무 → 바이트
3 · 클래스 파일 414바이트 안에 든 것 바이트를 한 구간씩 해독한다
4 · 시작 java Hello를 친 순간 런처 · JVM · Java 코드 · 내 코드 사이 19스텝
5 · 스택 1부터 5까지 더하기 명령을 한 줄씩 실행하며 칸과 스택을 본다
6 · 힙 객체 필드에 더하기 같은 덧셈이라도 힙이 바뀐다
7 · GC 살아 있는 것만 옮긴다 영역 격자가 비워진다
8 · JIT 자주 도는 코드 번역 구간마다 빨라지는 시간 막대

8단계를 한 번 지나면 다음 질문에 답할 수 있다.class는 왜 OS를 안 타나, 지역 변수와 객체 필드는 왜 사는 곳이 다른가, GC는 무엇을 기준으로 남기나, 같은 코드가 왜 두 번째부터 빨라지나.


같이 읽는 글

Study가 런타임을 따라갔다면, 아래 글은 그 위에서 코드를 어떻게 짜는지를 다룬다.


아직 안 한 것

수련각의 나머지 자리다. 지금은 비어 있고, 공부하면서 채운다.

  • 클래스로더 — Study 4단계에서 「읽어 들인다」로 지나간 자리. 부모 위임, 언로딩, 커스텀 로더
  • 스레드와 메모리 모델synchronized, volatile, happens-before
  • 컬렉션 내부HashMap이 실제로 어떻게 버킷을 나누고 언제 트리로 바뀌나
  • GC 알고리즘 비교 — Study 7단계는 한 가지만 본다. G1 · ZGC · Parallel을 조건별로

← 백엔드 대본영으로

최상단으로 이동했습니다!
확대 이미지

조회수: - · -

업데이트: