Java Study 1Week

Rm·2021년 1월 5일
0

목표

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

JVM이란 무엇인가

Java Virtual Machine(자바 가상 머신)은 작성한 자바 프로그램이 수행되는 프로세스를 의미한다.
java라는 명령어를 통해서 애플리케이션이 수행되면, 이 JVM 위에서 애플리케이션이 동작한다.

컴파일 하는 방법

JDK를 설치하면 bin 폴더 안에 javac라는 java compiler가 포함되어 있습니다.
javac 파일이름.java를 하게되면 컴파일이되면서 폴더 내 class 파일이 생성됩니다.

실행하는 방법

java 파일이름.java하면 실행합니다.

바이트코드란 무엇인가

자바 문법으로 작성한 .java 파일은 사람이 이해할 수 있는 언어로 작성했기 때문에 이해할 수 없습니다.
따라서 기계어로 전달하기위해 바이트코드로 변환하여 전달합니다.

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

JIT(Just In Time)은 컴파일러로 바이트코드를 기계어로 번역하여 실행하는 것을 뜻합니다.
인터프리터와 스태틱의 혼합으로 캐시에 담아놨다가 실행시 그때마다 반복된 작업은 캐시를 이용하고 그 외엔 추가적으로 실행합니다.

JVM 구성 요소

JVM은 크게 네가지 구성 요소를 가진다.

  1. Class Loader

  2. GC (Garbage Collector)

  3. Execution Engine

  4. Runtime Data Area

  1. Class Loader

    :: JRE의 일부로, 바이트코드를 실행할 때 class 객체를 메모리에 생성하는 요소이다.

    클래스의 인스턴스를 생성하면 Class Loader를 통해 메모리에 로드한다.

  1. GC (Garbage Collector)

    :: 자바는 메모리 관리를 사용자가 아닌 JVM이 알아서 해준다.

    GC는 더이상 참조되지 않는 메모리를 정리해준다.

    GC가 언제 호출되는지는 알 수 없으며, 심지어 사용자가 호출하더라도 메모리 정리할 필요가 없다고 판단하면 실행하지 않는다.

  1. Execution Engine

    :: 메모리에 로드 된 바이트코드를 실행하는 역할을 한다.

    Class Loader를 통해 Runtime Data Area에 배치된 바이트코드는 Execution Engine에 의해 실행 된다.

    인터프리터 방식이나 JIT 방식으로 실행한다.

  1. Runtime Data Area

    :: JVM의 메모리 영역이다.

    크게 네가지 영역으로 구분할 수 있다.

    a. 클래스 영역

       -> 실행에 필요한 클래스들을 로드하여 저장한다. 내부에서 메소드 영역과 상수 영역으로 또 나뉘어 저장 된다.

    b. 가비지 컬렉션 힙 영역

       -> GC에 의해 관리되는 영역이다. 동적 메모리 할당 영역 이라고도 하며, 소스상에서 new 연산자로 객체를 만들 때 할당되는 영역이다.

    c. 런타임 스택 영역

       -> 프로그램 실행 중 발생하는 메소드 호출과 복귀에 대한 정보를 저장한다.

    d. 네이티브 메소드 스택 영역

       -> 자바에는 하드웨어를 직접 제어하는 기능이 없기 때문에, 필요할 경우 C언어와 같은 다른 언어의 기능을 빌려 사용한다.
    
           이때 사용하는 기술이 JNI (Java Native Interface) 기술로 네이티브 메소드들이 바이트 코드로 변환 되면서 사용되고 기록하는 영역이다.

JDK와 JRE의 차이

JDK :: Java Development Kit -> 자바 개발 도구

JRE :: Java Runtime Environment -> 자바 실행 환경

즉, 자바 언어로 프로그램을 개발하기 위해서는 JDK를 설치해야 하고

자바 언어로 작성된 프로그램을 실행하기 위해서는 JRE를 설치해야 한다.

JDK를 설치하면 JRE가 포함되어 같이 설치된다.

profile
우당탕 개발자 성장기

0개의 댓글