자바 실행 과정
- 프로그램 실행
- 자바 컴파일러 javac 에서 소스코드 .java 를 읽어서 바이트 코드 .class 로 변환한다.
- class loader로 class파일을 JVM으로 로딩
- class 파일들을 Execution engine으로 해석
- 해석된 바이트 코드를 Runtime Data areas에 배치되어 수행
JVM
- java application을 class loader를 통해 읽어서 자바 API와 함께 실행한다.
- JAVA와 OS사이의 중개자 역할
- 자바 byte code를 실행할 수 있는 주체
- JAVA가 다른 언어에 비해 OS에 영향을 받지 않고 사용 가능하도록 해주는 장점이 있다.
- 다른 언어는 malloc 같은 메모리 할당을 하고 해제를 해줘야 하지만 자바는 GC를 이용해서 메모리 관리를 대신 해준다.
- 스택 기반의 가상머신(정적)
GC
- 동적으로 할당된 메모리 영역에서 사용하지 않는 영역을 GC가 할당 해제한다.
Stack
- 정적 메모리 할당 영역
- Primitive 타입
- 메모리가 thread당 하나씩 할당
- 다른 thread끼리 stack 영역 접근 불가능
Heap
- 동적 메모리 할당 영역
- Object 타입
- heap 영역의 Object를 가리키는 참조 변수가 Stack에 할당
- stack과 다르게 thread가 여러개 있어도, heap은 1개의 영역만 존재
STACK | HEAP |
빠른 접근 속도 | 느린 접근 속도 |
정적 메모리 할당 | 동적 메모리 할당 |
메모리 크기 제한 (OS에 영향) | 메모리 크기 제한 X |
Primitive type | Object type |
문제점 memory shortage | 문제점 memory fragmentation |
ralloc(), new | |
선형적 | 계층적 구조 |
'프로그래밍 > JAVA' 카테고리의 다른 글
[자바의 정석] 연습문제 2. 연산자 (0) | 2022.06.23 |
---|---|
[자바의 정석] 연습문제 1.변수와 타입 (0) | 2022.06.23 |
Ch06. 클래스 (0) | 2022.01.02 |
Ch05. 참조 타입 (0) | 2022.01.01 |
Ch04. 조건문과 반복문 (0) | 2022.01.01 |