본문 바로가기

개발공부/JAVA

자바스터디 1일차 (feat.백기선님)

목표

자바 소스 파일(.java)을 JVM으로 실행하는 과정 이해하기.

학습할 것

  • JVM이란 무엇인가

: Java  Virtual Machine 의 약자. (자바 가상 기계)

: 자바의 특징 중 하나인 WORA(write once run anywhere)을 할 수 있도록 만들어준다.

: 타 언어는 운영체제에 종속적(플랫폼 종속적)이라 아무데서나 실행이 불가하지만 java는 JVM만 있으면 어디서든 실행 가능

 

  • 컴파일 하는 방법

: 컴파일이란 

소스 프로그램(우리가 작성하는 프로그래밍 언어) => 기계어(컴퓨터가 읽을 수 있는 언어)  변환하는 과정

* 자바의 경우 (확장자)

.java => .class 

: javac

자바 소스를 바이트 코드로 변환하는 컴파일러

 

  • 실행하는 방법

: 자바는 컴파일을 해준 뒤에 (.class 파일로 만든 후) JVM위에서 실행이 가능하다. 

: 컴파일 뒤에 실행.

: java

jre의 bin 디렉토리에도 동시에 설치되어있는 자바 응용프로그램 실행기로 이 도구를 통해 JVM이 작동하며 자바프로그램이 실행

 

  • 바이트코드란 무엇인가

: 자바 컴파일러가 자바 소스 프로그램을 컴파일 한 기계어

: 플랫폼에 대한 종속성 없이 JVM에서 실행되는 바이너리 코드다. (2진수로 되어있음)

 

  • JIT 컴파일러란 무엇이며 어떻게 동작하는지

: JIT(just-in-time compilation)

: JVM , .NET, node.js 등 에서 컴파일 하는 방식

: interpreter 방식의 단점을 보완하기 위해 도입된 방식

: JIT 컴파일러는 바이트코드를 읽어 빠른 속도로 기계어를 생성할 수 있다.

이런 기계어 변환은 코드가 실행되는 과정에 실시간으로 일어나며(그래서 Just-In-Time이다), 전체 코드의 필요한 부분만 변환한다. 기계어로 변환된 코드는 캐시에 저장되기 때문에 재사용시 컴파일을 다시 할 필요가 없다. 

: 딱 한번만 실행될 경우에는 인터프리터 방식이 더 나음

 

  • JVM 구성 요소

1. Class Loader : 컴파일 한 .class 파일을 런타임에 올려서 실행하는 부분

2. Execution Engine : .class 파일을 해석한다 (인터프리터, JIT 방식으로)

3. Runtime Data Area : 해석된 프로그램은 여기서 돌아간다. JVM 메모리 영역.  필요에 따라 GC나 쓰레드 동기화등 관리해줌

 

4. Garbage Collector : 메모리 관리를 해준다. Runtime Data Area에서 해주는 역할 중 하나

 

  • JDK와 JRE의 차이

: JDK (Java Development Kit)

: JRE (Java Run-time Environment)

: JDK가 더 큰 개념 

JDK는 자바컴파일러 등 자바 응용 프로그램을 개발하는데 필요한 도구

+자바 응용프로그램이 실행될때 필요한 JVM,

+ 그리고 JRE(표준 클래스 파일들을 포함)까지 포함

 

 

출처: 위키백과 , 명품 자바프로그래밍 책 (참조)