JVM이란 무엇인가
1. Java VM은 JVM이라고도 하며, VM(Virtual Machine)은 '가상의 기계'라는 뜻으로 Java프로그램을 실행시켜주는 구동엔진을 의미한다.
2. JVM은 Java프로그램의 실행에 필요한 모든 사항을 관리하고 지원해준다.
3. 가비지 컬렉션(Garbage Collection)이라고 불리는 메모리 정리 작업을 자동으로 실행한다.
→ Java프로그램이 쓰다 남긴 메모리 영역을 수거해서 다른 Java프로그램이 사용할 수 있도록 정리하는 것을 의미.
4. Java로 작성된 애플리케이션은 모두 이 가상 컴퓨터(JVM)에서만 실행되기 떄문에, 자바 애플리케이션이 실행되기 위해서는 반드시 필요하다.
컴파일 하는 방법
1. 컴파일이란 개발자가 작성한 소스코드를 바이너리 코드로 변환하는 과정을 말한다.(목적파일이 생성됨)
→ 컴퓨터가 이해할 수 있는 기계어로 변환하는 작업.
2. 컴파일에 앞서서 jdk 설치 또는 환경변수 설정
→ 제어판 > 시스템 > 시스템 환경 변수 편집 > 고급탭 > 환경변수 > 변수 중 path선택하고 편집(I) 클릭
3. jdk 설치가 되어있다면 버전확인
→ 이클립스 >프로젝트 목록에서 우클릭 > 제일 아래 properties 클릭 > 팝업창에서 Java Compiler에서 jdk버전확인
→ 명령 프롬프트 화면에서 java -version 입력 후 확인
실행하는 방법
1. 메모장에 Hello,world를 출력할 수 있는 코드 작성
class Hello{
Public static void main(String[] args){
System.out.println("Hello,World");
}
}
2. javac.exe 컴파일 (Hello.class 생성 ) → java.exe 실행 → "Hello,world"출력
바이트코드란 무엇인가
바이트코드(Bytecode, portable code, p-code)는 특정 하드웨어가 아닌 가상 컴퓨터에서 돌아가는 실행 프로그램을 위한 이진 표현법이다
JIT 컴파일러란 무엇이며 어떻게 동작하는지
→ 런타임시 .class 바이트 코드를 네이티브 코드로 컴파일하여 JAVA 응용 프로그램의 성능을 향상시킴 .
→ JIT(Just-in-Time) 컴파일러는 바이트코드를 읽어 빠른 속도로 기계어를 생성할 수 있다.
→ 이런 기계어 변환은 코드가 실행되는 과정에 실시간으로 일어나며, 전체 코드의 필요한 부분만 변환한다.
→ 기계어로 변환된 코드는 캐시에 저장되기 때문에 재사용시 컴파일을 다시 할 필요가 없다.
JVM 구성 요소
→ Class Loader
JVM 내로 클래스 파일을 load하고 link를 통해 배치를 수행하는 모듈로 Runtime 시에 동적으로 클래스를 로드한다.
자바는 동적 코드, 컴파일 타임이 아니라 런타임에 참조한다.
즉, 클래스를 처음으로 참조할 때 해당 클래스를 load하고 link한다.
→ Execution Engine
class loader를 통해 배치된 클래스를 실행시킨다.
클래스 파일(바이트 코드)은 비교적 인간이 보기 쉬운 형태이기 때문에 기계가 실행할 수 있는 형태로 변경시키는데
이 때, 두 가지 방식을 사용한다. ( 인터프리터, JIT )
→ Interpreter
실행 엔진은 바이트 코드를 명령어 단위로 실행한다.
이는 한 줄 씩 수행하기 때문에 느리다는 단점을 가지고 있다.
→ JIT (Just In Time) Compiler
Interpreter 방식의 단점을 보완하기 위해 도입된 방식으로,
Interpreter 방식으로 실행하다가 적절한 시점에 바이트 코드 전체를 컴파일 하여 네이티브 코드로 변경하고,
더 이상 Interpreting 하지 않고 네이티브 코드로 직접 실행하는 방식이다.
네이티브 코드는 캐시에 보관되기 때문에 한 번 컴파일된 코드는 빠르게 실행할 수 있다.
물론 한 번만 실행되는 코드라면 JIT 보다 Interpreter 방식이 유리하다.
따라서 JVM은 해당 메소드가 얼마나 자주 수행되는지 체크하고, 일정 정도를 넘을 때 컴파일을 수행한다.
→ Garbage Collector
동적으로 할당된 메모리 중 사용되지 않는 메모리를 반환한다.
실행 시기는 JVM이 OS에 메모리를 추가적으로 요청했을 때 실행되고,
24시간 내내 돌아가는 서버 프로그램의 경우, JVM이 한가한 시점에 실행된다.
JDK와 JRE의 차이
→ JRE(Java Runtime Environment) : Java 애플리케이션을 실행하는 데 필요한 환경 (표준 라이브러리 및 JVM)
→ JDK(Java Development Kit)는 개발자 도구 및 설명서가 포함 된 JRE입니다.
→ JDK와 JRE의 차이점은 JDK는 Java 용 소프트웨어 개발 키트이고 JRE는 프로그램을 실행하는 장소입니다.
<References>
Java프로그래밍 김희천,정재헌 공저
Java의 정석 . 저자 남궁성
그외 구느님에서 검색된 자료들을 참고하였습니다.
'Challenge' 카테고리의 다른 글
6주차 과제: 상속 (0) | 2020.12.26 |
---|---|
5주차 과제: 클래스 (0) | 2020.12.19 |
4주차 과제: 제어문 (0) | 2020.12.03 |
3주차 과제: 연산자 (0) | 2020.11.25 |
2주차 과제: 자바 데이터 타입, 변수 그리고 배열 (0) | 2020.11.21 |
댓글