JVM3 [JVM Internal] 자바 객체 생성(new) 비용은 비쌀까? - 힙 메모리 할당 과정 3단계 분석 들어가며이전 포스팅들은 스택 영역에서의 바이트코드의 상호작용을 다뤘다. 런타임 데이터 영역에는 스택 영역 뿐만 아니라 힙 영역이 존재한다. JVM 스펙에 따르면 다음 내용을 확인할 수 있다:"자바 가상 머신은 모든 스레드가 공유하는 힙(Heap) 영역을 가지고 있습니다. 힙은 모든 클래스 인스턴스와 배열의 메모리가 할당되는 런타임 데이터 영역입니다." 따라서, 이 글에서는 객체와 힙 영역에 관련된 여러 요소들을 탐험하고 실험하는데 목적이 있다. Object 클래스의 객체 생성 (new 키워드)처음으로 시도해볼 실험은 가장 순수한 객체를 생성해보는 것이다. 아무런 필드도, 로직도 없는 가장 순수한 형태의 객체를 생성해 볼 수 있는 클래스는 java.lang.Object이다. Object 객체를 생성할때 과.. 2026. 2. 4. [JVM Internal] 바이트코드로 이해하는 자바 제어 흐름(Control Flow) 들어가며이전 포스팅에서는 컴파일된 증감연산자(i++, ++i)의 정적인 바이트코드를 분석했다. 해당 실험에서는 load, store 등의 명령어를 피연산자 스택을 통해 어떻게 연산이 이뤄지는지, iinc 명령어의 최적화 방식을 이해할 수 있었다. 이번에는 단순한 연산을 벗어나, 프로그램의 실행 순서를 바꾸고 제어하는 제어 흐름(Control Flow)을 다뤄보려고 한다. 코드의 흐름을 나누는 분기문(if-else), 특정 구간을 반복하는 반복문(for-loop, while), 조건에 따라 특정 점프하는 스위치문(switch)에 해당된다. 각각 바이트코드 레벨에서 어떻게 흐름을 제어하는지 실험을 통해 살펴본다. 실험java 코드를 작성하고 javac ControlFlowTest.java 와 javap -.. 2026. 1. 25. [JVM Internal] 레지스터 vs 스택 머신: 자바는 왜 스택 방식을 택했는가? (바이트코드 분석) 들어가며이 글은 거창하게 바이트코드를 분석하려는 의도로 시작하지 않았다. 단지 JVM을 학습하는 과정에서 제시된 간단한 실습 예제를 직접 실험해보고 있었다. 작성된 자바 파일을 javac와 javap 명령어로 컴파일하고 역어셈블(Disassemble)하는 과정은 생각보다 많은 질문을 던져주었다. "우리가 작성한 소스코드는 실제로 JVM 위에서 어떻게 돌아갈까?""단순한 i++ 연산은 CPU와 메모리 관점에서 어떤 비용을 지불하는가?" 이러한 질문을 가지고 실험을 하면서, 컴파일러의 최적화와 JVM의 스택 머신 아키텍처 특징을 바이트코드와 그 연산 플로우에서 확인할 수 있었다. 이 글에서는 간단한 증감 연산자(i++) 실험을 통해 소스코드가 바이트코드로 변환될 때 발생하는 차이와 그 원리를 정리해본다. 자.. 2026. 1. 19. 이전 1 다음