• JVM이란 무엇인가
    Java Virtual Machine에 약어이다.
    JVM의 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하는것을 의미한다. 
  • 컴파일 하는 방법
    개발자가 자바 소스코드(.java)를 작성한다.
    자바 컴파일러가 자바 소스파일을 컴파일 한다. 이때 나오는 자바 바이트 코드(.class) 파일은 아직 컴퓨터가 읽을 수 없다. 
    컴파일한 바이트 코드를 JVM 클래스 로더에게 전달한다. 
    클래스 로더는 동적로딩을 통해서 필요한 클래스를 로딩 및 링크 해서 JVM의 메모리 영역에 올린다. 
    실행엔진이 JVM 메모리에 올라온 바이트 코드들을 명령어 단위로 하나씩 가져와서 실행한다. 

  • 실행하는 방법
    java -jar [file-name].jar 로 실행한다.

  • 바이트코드란 무엇인가
    가상 컴퓨터에서 실행 프로그램을 위한 이진 표현법이다.

  • JIT 컴파일러란 무엇이며 어떻게 동작하는지
    프로그램의 소스 코드를 프로그램 실행 시 즉석에서(런타임) 기계어로 컴파일하여 실행시키는 방법이다. JIT 방식은 컴파일 방식, 인터프리트 방식을 섞어 놓은것이다. JIT 방식은 캐싱을 하기 때문에 어딘가에 저장해 두고 필요할 때마다 꺼내와 사용한다. 

  • JVM 구성 요소
    메모리 관리, Class Loader, Execution Engine 
    1) Class Loader
     JVM으로 클래스 파일을 로드시키는 역할을 담당.
     모든 클래스 파일을 한 번에 메모리에 올리는게 아니라 필요할 때마다 동적으로 올립니다. 

    2) 메모리 관리
     Heap은 모든 객체가 저장된다. 
     인스턴스 변수나 배열도 여기 저장된다. 

    3) Execution Engine 
     로드된 바이트 코드를 실행하는 파트가 Execution Engine 입니다. 
     JIT으로 중복되는 부분을 미리 체크하고 라인별로 인터프리터 방식을 사용한다.
     체크한 부분에 도달하면 미리 캐시된 값을 실행한다. 

  • JDK와 JRE의 차이
    JDK와 JRE의 차이점은 JDK는 Java 프로그램을 개발하고 실행할 수있는 환경을 제공하는 반면 JRE는 Java 프로그램을 실행하는 환경 만 제공한다.