자바 실행 과정

- 프로그램 실행

- 자바 컴파일러 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

+ Recent posts