본문 바로가기

Java

컴파일 과정

반응형

Java 컴파일 과정에 대해 설명하겠습니다.

 

Java 는 OS에 독립적입니다. JVM이 OS와 프로그램 사이에서 기계어로 해석해주는 역할을 수행하고 있기 때문입니다.

 

실행과정

1. .java 파일을 생성하고 build 수행

- complier 의 javac 명령어를 사용해 .class 파일을 생성합니다.

- .class 파일도 아직 java byte code로 컴퓨터가 읽을 수 없습니다. 변환 과정이 필요합니다.

 

2. .class 파일을 java.exe 로 실행

.class 파일은 클래스로더를 통해 JVM내 로드됩니다.

그 후 *실행엔진에 의해 binary code로 변환되어 메모리상 배치됩니다.

 

* 실행엔진(Excution Engine)

실행엔진에는 인터프리터와 JIT컴파일러가 있습니다. 

인터프리터는 바이트코드를 한줄씩읽어 binary code로 바꿔주며 변환된 코드를 실행합니다.

JIT는 인터프리터 방식을 사용하다가 적정한 때에 바이트코드 전체를 기계어로 바꿔줍니다.

바이트코드 전체를 컴파일하고 해석된 코드를 캐시에 보관하기 때문에 컴파일 이후에는 빠르게 수행할 수 있습니다.

캐싱을 통해 인터프리터의 단점을 극복할 수 있습니다.

 

3. Runtime 실행

 

 

JVM 내 Runtime Data Area

Stack Area

클래스내의 메소드에서 사용되는 매개변수, 지역변수, 리턴값 등이 저장됩니다.

메소드 실행시 저장되며 실행 종료시 제거됩니다.

 

Method Area

클래스와 메소스, 멤버변수, 상수 등이 저장되는 공간입니다.

 

Heap Area

New로 생성한 인스턴스, 배열 등 참조형 변수가 저장됩니다.

Garbage Colletor의 대상이 됩니다.

객체가 생성되면 최초로 Eden 영역에 할당됩니다.

Eden 영역에 데이터가 어느정도 쌓인 후엔 Servior1, Servior2 중 빈 공간으로 이동되거나 회수됩니다.

이 영역을 New Generation이라 합니다.

  • New Generation = Eden + Servior1 + Servior2

 

New Generation영역이 차게되면 Old 영역으로 이동되거나 회수됩니다.

이 영역을 Tenured Generation이라 합니다.

  • Tenured Generation = Old

 

Old 영영이 차게되면 Old 영역의 모든 객체를 검사하여 참조되지 않은 객체를 삭제하는 GC(Garbage Collector)가 실행됩니다. 이때 실행되는 GC는 Major GC라고하며 다른 모든 쓰레드들을 멈추고 수행됩니다. 이를 Stop-the-world라 합니다.

 

 

반응형

'Java' 카테고리의 다른 글

Refresh Token  (0) 2020.12.15
Thread Safe  (0) 2020.09.22
HashMap & HashSet  (0) 2020.09.16
Content-Type  (0) 2020.07.14
API Security & JWT  (0) 2020.03.08