저우즈밍 님의 "JVM 밑바닥까지 파헤치기" 책을 정리한 포스팅 입니다
1. 바이트코드 명령어
- 명령어 크기: 1바이트 (256개 가능)
- 타입 내장 (ex. iload-int, fload-float)
기본 명령어
분류 | 명령어/설명 |
load |
지역 변수 → 피연산자 스택
iload, aload, fload 등 |
store |
피연산자 스택 → 지역 변수
istore, astore, fstore 등 |
산술 명령어
- 피연산자 스택의 값 두 개를 이용해 특정한 산술 연산을 수행
- 결괏값을 다시 피연산자 스택의 맨 위에 저장
타입 | 명령어 예시 | 설명 |
정수 연산 | iadd, isub, imul, idiv, irem, ineg, iinc, iand, ior, ixor |
피연산자 스택에서 연산 수행 후 결과 다시 push
|
비트 연산 | ishl, ishr, iushr 등 | 비트 단위 이동 |
부동소수점 | fadd, fdiv, dadd, dmul 등 |
IEEE 754 기반. 근사값 저장, 정확성 확보 목적
|
형변환 명령어
- 숫자 타입 데이터를 다른 숫자 타입으로 변환
유형 | 설명 |
Upcasting |
표현 범위가 넓어질 때: JVM이 자동 수행
|
Downcasting |
표현 범위가 줄어들 때: 명시적 명령어 필요, 일부 비트 손실 가능, 런타임 에러는 없음
예: i2b, i2c, d2i, l2f 등 |
객체 및 배열 생성 명령어
기능 | 명령어 예시 | 설명 |
객체 생성 | new |
클래스 인스턴스 생성
|
배열 생성 | newarray, anewarray, multianewarray |
1차원/다차원 배열 생성
|
타입 확인 | instanceof | 타입 체크 |
필드 접근 | getfield, putfield, getstatic, putstatic |
인스턴스/정적 필드 접근
|
배열 접근 | baload, caload, saload → 배열 → 스택 bastore, castore, sastore → 스택 → 배열 |
배열 원소 로드/저장
|
피연산자 스택 관리 명령어
명령어 | 설명 |
pop | 스택 맨 위 값 제거 |
dup |
최상위 스택 값 복제
|
swap |
스택 상위 두 값을 교환
|
제어 흐름 명령어
명령어 | 설명 |
if<cond> |
조건에 따라 분기 (ifeq, ifne, iflt, if_icmpeq 등)
|
goto | 무조건 분기 |
tableswitch |
복합 조건 분기 (switch-case 구현에 사용)
|
메서드 호출과 반환 명령어
호출 관련 명령어 | 설명 |
invokevirtual |
인스턴스 메서드 호출
|
invokeinterface |
인터페이스 메서드 호출
|
invokestatic |
정적(static) 메서드 호출
|
invokespecial |
생성자 or private 메서드 호출
|
ireturn, freturn, areturn, return |
메서드 종료 및 값 반환
|
예외 처리 명령어
명령어 | 설명 |
athrow |
예외를 명시적으로 발생시킴
|
예외 처리 구조 |
.class에는 예외 테이블(exception table)이 함께 존재하여 catch 블록 대응
|
동기화 명령어
수준 | 구현 방식 |
메서드 수준 |
synchronized 메서드
|
블록 수준 |
monitorenter / monitorexit 명령어로 동기화 영역 제어
|
반환 시 동기화 해제 |
monitorexit → 동기화 블록 정상 종료 or 예외 발생 시 해제 필요
|
'Java' 카테고리의 다른 글
[JVM 밑바닥까지 파헤치기] 7-2. 클래스 로딩 매커니즘: 클래스 로더 (0) | 2024.12.23 |
---|---|
[JVM 밑바닥까지 파헤치기] 7-1. 클래스 로딩 매커니즘: 클래스 로딩 처리 과정 (3) | 2024.12.23 |
[JVM 밑바닥까지 파헤치기] 6-1. 클래스 파일 구조: 클래스 파일 (0) | 2024.12.22 |
[JVM 밑바닥까지 파헤치기] 3-5. 가비지 컬렉터와 메모리 할당 전략: 저지연 가비지 컬렉터 (0) | 2024.12.21 |
[JVM 밑바닥까지 파헤치기] 3-4. 가비지 컬렉터와 메모리 할당 전략: 클래식 가비지 컬렉터 (0) | 2024.12.21 |