JVM 이란?

Java Virtual Machine 의 줄임말이며 Java Byte Code를 OS에 맞게 해석 해주는 역할을 한다. Java compiler는 .java파일을 .class라는 Java byte code로 변환시켜준다. Byte Code는 기계어가 아니기 때문에 OS에서 바로 실행되지 않는다.. 이 때 JVM은 OS가 Byte Code를 이해할 수 있도록 해석해준다 하지만 JVM의 해석을 거치기 때문에 C언어 같은 네이티브 언어에 비해 속도가 느리지만, JIT(Just in Time)컴파일러를 구현해 이점을 극복했다. Byte Code는 JVM 위에서 OS상관없이 실행되는것이 Java의 가장 큰 장점이라고 할 수 있다. OS에 종속적이지 않고, Java 파일 하나만 만들면 어느 디바이스든 JVM 위에서 실행 할 수 있다. JVM은 크게 Class Loader, Runtime Data Areas, Excution Engine 3가지로 구성 되어 있다.

컴파일 하는 방법

  1. 컴파일이란

    소스 프로그램(개발자가 작성하는 프로그래밍 언어) 에서 기계어(컴퓨터가 해석할 수 있는 언어)로 변환하는 과정이다.

    Java에서는 .java 파일을 .class 파일로 변한하는 과정을 의미한다.

  2. 컴파일 방법

    public class HelloWorld{
    	public static void main(String args[]) {
    		System.out.println("Hello World");
    	}
    }
    

  3. 실행하는 방법

    바이트 코드란 무엇인가

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

    Just In Time. 프로그램을 실제 실행하는 시점에 번역하는 컴파일 기법이다.

    javac의 컴파일과 JIT의 컴파일은 다르다. 자바컴파일러(javac)는 자바 소스코드를 바이트코드로 변환하고 JIT는 변환된 바이트코드를 해석하고 실행한다.

    같은 코드를 매번 해석하지 않고 실행할 때 컴파일 하면서 코드를 캐싱 한다. 사전에 정의된 임계치에서 시작하여 호출될 때마다 감소시키는 방식으로 자주 사용되는 메서드를 찾는다. 자주 사용되는 메서드는 저장해서 해석하지 않고 바로 실행시키는 방식으로 성능을 향상시킨다.

    JVM 구성 요소

    Class Loader, Runtime Data Areas, Excution Engine로 구성되어 있다.

    1. Class Loader

      • 클래스를 JVM의 메모리에 로드한다. 런타임 영역에서 바이트 코드로 배치한다.
      • 읽어들인 클래스를 검사한다.
      • 클래스에 필요한 메모리를 할당하고, 클래스에서 정의된 필드, 메서드, 인터페이스들을 나타내는 데이터 구조를 준비한다.
      • 클래스의 상수 풀 내 모든 심볼릭 레퍼런스를 다이렉트 레퍼런스로 변경한다.
    2. Execution Engine

    1. Runtime Data Area

    JDK와 JRE의 차이

JDK 3-4

메서드 호출 생성되는 스레드 수행 정보를 기록.. 임시 데이터를 저장.