23-06-27 미작성 내용 보충
23-07-01 내용 보충 및 작성 완료
Java 개요
1. Java의 개발 철학
Write Once, Run Anywhere
- 플랫폼과 독립적인 언어를 지향
- 같은 언어로 짜여진 코드를 어떤 운영 체제에서든 실행시킬 수 있는 것을 초점으로 두고 개발됨 (일종의 크로스 플랫폼)
2. JDK
-
Java Development Kit
자바 개발 툴이며 JRE, JVM을 전부 포함한다. 기본적으로 자바로 만든 프로그램만 실행하면 되는 사용자와 달리 개발자는 JDK를 설치해야 한다. JDK는 Compiler를 포함하고 있다.
-
Java Runtime Environment
자바 실행 환경으로 Java Class Library, Java Class Loader, JVM을 포함하고 있다. 클래스 로더와 라이브러리를 통해 작성된 자바 코드를 라이브러리와 결합하여 JVM에서 구동할 수 있도록 한다.
-
Java Virtual Machine
JVM이란?
- Java Virtual Machine, 자바 가상 머신.
- 자바 프로그램 실행 환경을 조성해주는 소프트웨어
Java Code → Compiler → 기계어
애플리케이션 실행을 위한 메모리를 할당 받아서 Java Runtime Data Area를 구축한다.
Runtime Data Area
위 2개의 영역은 모든 Thread가 공유
- PC Register
- Native Method Stack
- Stack 영역
위 3개의 영역은 Thread마다 시작 시에 생성, 종료 시 없어진다.
각 영역별 세부 사항
1. Heap
- 클래스의 인스턴스, 배열이 저장되는 공간
- 동적 메모리 관리 시스템 'Garbage Collection'
2. Method
3. Stack
- C의 스택 구조와 유사하며, 지역 변수 및 함수의 실행 결과를 저장
- 함수의 호출과 반환을 담당하며 Stack Frame을 가진다.
- Stack Frame 이란?
각 함수마다 함수의 호출 정보가 포함된 구분된 공간
Frame은 LIFO 방식으로 처리됨
여유 공간이 없을 때 프레임이 추가될 경우 → Stack Overflow 발생
프롤로그, 에필로그를 활용한 포인터 방식으로 스택 복귀 위치 확인
4. Native Method Stack
- C, CPP로 작성된 메서드의 실행 스택
- 코드 실행 시 Native Method Stack이 할당됨
- StackOverflowError나 OutOfMemoryError 발생할 수 있음
- 동적으로 스택의 크기를 조정할 수 있음
5. PC Register
- 각 스레드마다 PC Register를 보유
- 스레드가 현재 할당된 명령을 실행할 때 명령의 주소를 기록
- 명령마다 값을 꾸준히 변동시켜 가리키는 값을 실행하도록 함
참고
JVM Document
고랭이님의 블로그
sgwon1996님의 velog