- 강의
- 39강(Big Picture) ~ 40강(JVM 원리)
실무 백엔드 에러
- 비즈니스 로직 에러
- 코드는 정상적으로 돌아가지만 원하는 로직이 동작하지 않음
- 시스템 버그
- 데이터베이스 에러
- 네트워크 에러
- JVM 에러 → JVM 모니터링을 통해서 예방
Java 기초
- 실습 : Java RAM 메모리 할당
- IntelliJ → Modify Run Configuration … → Modify Options → Add VM options → -Xmx1M 입력
- -Xmx1M : 최대 RAM의 heap 메모리값을 1mbyte 할당
- 컴파일 : .java 파일을 .class 파일로 변경하는 빌드 과정
- 컴파일 에러
- Syntax Error
- Type Check Error
- 컴파일 에러
- 런타임 : 실행 과정
- 런타임 에러
- 메모리 부족 에러
- null reference error
- 런타임 에러
- IntelliJ tool
- IntelliJ profiler : Java 애플리케이션 문제 진단 및 성능 측정 도구
- Events를 주로 확인함 → JVM(Java Virtual Machine)의 GC
- IntelliJ Debugger : Java 애플리케이션 버그, 에러를 찾고 수정하는 툴
- break point : 멈추는 포인트
- 코드 진행
- Step Over : 다음 라인 진행
- Step Into : 라인의 자세한 메서드 진행
- Step Out : 자세히 들어간 메서드에서 원래 곳으로 돌아감
- Force Into : 자바에서 제공하는 기본 클래스의 Step Into를 강제로 하는 것
- Resume Program : 다음 브레이크 포인트로 이동
- 진행값 확인
- IntelliJ profiler : Java 애플리케이션 문제 진단 및 성능 측정 도구
JVM
자바 컴파일 및 실행 과정
JVM 구조
- Native Method Library : Java가 아닌 언어로 작성된 네이티브 메서드 구현을 포함한 라이브러리
- Native Method Interface(NMI) : JVM에서 네이트브 메서드를 사용할 수 있도록 하는 인터페이스
Java 실행 과정
JVM의 Class Loader(클래스 로더)
- 컴파일된 여러 .class 파일을 loading, linking, initialization을 한 후 필요한 데이터를 Runtime Data Area에 저장
- Lading(로드) : 클래스 파일을 가져와 JVM의 메모리로 로드
- Linking(링크) : 클래스 파일 사용을 위한 검증 과정
- Verifying(검즘) : 클래스가 JVM 명세대로 구성되어 있는지 검사
- PreParing(준비) : 클래스가 필요로 하는 메모리 할당
- Resolving(분석) : 클래스 상수들의 모든 심볼릭 레퍼런스를 다이렉트 레퍼런스(주소값)로 변경
- Initialization(초기화) : 변수들을 적절한 값으로 초기화
JVM의 execution engine(실행 엔진)
- Java Interpreter : byte 코드를 한 줄씩 읽고 실행하는 과정으로, class 파일을 OS가 기계어로 읽는 과정
- JIT complier(Just-In-Time Complier) : 자주 사용하는 코드를 컴파일
- GC(Garbage Collector) : 자주 사용하지 않는 객체를 해제해서 메모리 관리(메모리 최적화)
JVM의 Runtime Data Area
- JVM이 실행되는 동안 데이터를 저장하는 메모리 공간
JVM의 Runtime Data Area - JVM stack
- 임시로 할당되고 소멸되는 정보 저장
- 프레임 단위로 저장됨
- 프레임 : 해당 메소드(매개 변수, 지역변수 등)를 저장하는 공간으로, 메서드 종료 시 삭제됨
- Native Method Stack : 네이티브 메서드가 호출될 때 사용되는 스택
- Heap
- 동적 영역
- 인스턴스와 배열 타입 등 저장
- Method Area
- "클래스(속성, 메소드, 상속 정보 등), 메소드(매개변수, 이름, 접근제어자 등), 정적 필드, 상수 풀"을 저장하는 영역
- 상수 풀 : static이 붙은 정적 변수, 리터럴 등의 저장 영역 → 컴파일 시 저장됨
- 클래스, 메소드 등에 대한 정보는 Class Loader 동작 시 저장됨
- 아래 class 내 static 구문은 class loader 동작 시 실행되고 저장됨
class Student {
static {
System.out.println("I'm student.");
}
}
- 실습 - JVM 동작 확인
- IntelliJ → Modify Run Configuration … → Modify Options → Add VM options → 명령어 입력
- 명령어
- -Xlog:class+init : 클래스 로더 동작 확인
- -XX:+PrintCompilation : 실행 엔진 동작 확인
- 터미널
- 컴파일 후 out/production/{프로젝트명} 폴더로 이동 명령어 입력
- 명령어 : javap -v 클래스_파일명
- Constant pool(상수 풀) 생성 내용 확인
'슈퍼코딩 > 주특기(JAVA)' 카테고리의 다른 글
2024.05.08(수) 슈퍼코딩 신입연수원 6주차 Day 3 후기 - Wrapper, Generic (0) | 2024.05.08 |
---|---|
2024.05.07(화) 슈퍼코딩 신입연수원 6주차 Day 2 후기 - JVM 메모리, GC, Object, 기본 클래스 (0) | 2024.05.07 |
슈퍼코딩 신입연수원 5주차 후기 (0) | 2024.05.04 |
2024.05.03(금) 슈퍼코딩 신입연수원 5주차 Day 5 후기 - 추상 클래스, 인터페이스 (0) | 2024.05.03 |
2024.05.02(목) 슈퍼코딩 신입연수원 5주차 Day 4 후기 - 다형성 (0) | 2024.05.02 |