2021-java-study
2021 자바 스터디 2주차 과제
자바 기초
JVM이란?
Java Virtual Machine(자바 가상 기계)의 약자를 따서 줄여 쓰는 용어
- 자바 바이트 코드를 실행하는 주체
- Java와 OS사이에서 중개자 역할을 수행
- OS에 맞게 구현됨
- 메모리 관리, Garbage Collection 수행
- 스택 기반의 가상머신
컴파일 하는 방법
사람이 이해하는 언어를 기계어로 바꾸는 과정
자바 소스코드(.java)를 자바 바이트코드(.class)로 변경
| javac 명령어 사용

| 디렉토리 확인

실행하는 방법
$ java 파일명

바이트코드란 무엇인가
가상 컴퓨터에서 작동하도록 만든 이진코드
- 명령어 크기가 1바이트
- 확장자는 .class
- 자바 가상 머신만 설치되어 있으면 어떤 운영체제에서도 실행 가능
JIT 컴파일러란 무엇이며 어떻게 동작하는가
Just-In_Time 의 약자로 프로그램을 실제 실행하는 시점에 기계어로 번역
- JIT 컴파일러는 JRE안에 존재
- 프로그램이 시작되고 코드를 컴파일 후에 JIT 컴파일러를 실행
JIT 컴파일러와 인터프리터
- 인터프리터 방식은 명령어를 하나씩 해석해 처리하기 때문에 전체 코드를 실행할 때는 실행 속도가 느리다. JIT 컴파일러는 클래스파일을 기계어로 한번에 컴파일 후 사용하기 때문에 코드 수행속도가 인터프리터 방식에 비해 빠르다
- 그렇지만 처음 실행 단계에서는 컴파일 과정때문에 초기 실행 속도가 느릴 수 있다.
JVM 구성 요소
1. Class Loader (클래스로더)
2. Execution Engine (실행 엔진)
3. Garbage Collector
4. Runtime Data Area
Class Loader
- 자바 컴파일러에 의해 바이트 코드로 변환된 클래스를 읽어들여 메모리에 저장
Execution Engine
- Class Loader에 의해 저장된 클래스를 기계어로 변환하고 실행하는 역할
- Interpreter 방식으로 실행되기도 하고, JIT에 의해 실행되기도 함
Garbage Collector
- Heap 영역에 생성되어 있는 객체들 중 참조되지 않는 객체를 찾아 제거하는 역할
Runtime Data Area
- JVM의 메모리 영역으로 자바 애플리케이션 실행시 사용되는 데이터를 저장하는 영역
JDK와 JRE의 차이
JDK
Java Development Kit - JRE와 개발툴
- 자바 개발 도구
- JRE와 개발을 위해 필요한 도구(javac,java)를 포함
- 오라클 JDK, OpenJDK 등이 있으나 일반적으로 오라클 JDK 사용
JRE
Java Runtime Environment - JVM과 라이브러리
- 자바의 실행 환경
- JVM이 자바 프로그램을 동작시 필요한 라이브러리 파일 등을 가짐
- 런타임 환경 제공
- JVM을 구현하는 역할