• JDK : Java Development Kit
  • JRE : Java Runtime Environment
  • J2SE : Java 2 Standard Edition
  • Java SE : Java Standard Edition

  • JRE는 실행만을 위한 환경이다. 따라서, JRE만 설치하면, 자바를 컴파일하는 등의 각종 프로그램이 제외된 상태로 설치된다. 즉, JRE는 자바를 실행할 수 있는 환경의 집합이라고 보면된다.

자바언어의 특징

  1. 단순하고, 객체지향이며, 친숙해야 한다
  2. 견고하며, 보안상 안전하다.
  3. 아키텍처에 중립적이어야 하며 포터블 해야한다.
    • 자바로 작성한 프로그램은 매우 다양한 하드웨어 아키텍처에서 수행할 수 있도록 되어있다. 따라서 자바는 아키텍처에 중립적인 바이트 코드를 생성한다. 그래서 자바의 버전만 동일하면 동일한 프로그램은 어떤 플랫폼에서도 실행할 수 있다.
  4. 높은 성능을 제공해야 한다.
  5. 인터프리트 언어이며, 쓰레드를 제공하고, 동적인 언어 이다.

JIT 컴파일러

  • JIT은 Just-In-Time의 약자이다.
  • JIT을 사용하는 언어에는 자바, .NET 등이 있다.
  • 좀 더 쉬운말로 “동적 변화(dynamic translation”)” 이라고 보면 된다.
  • 인터프리터 방식은 프로그램을 실행할 때마다 컴퓨터가 알아 들을 수 있는 언어로 변환하는 작업을 수행한다. 따라서 간편하기는 하지만 성능이 매우 느릴 수 밖에 없다.
  • 정적 컴파일 방식은 실행하기 전에 컴퓨터가 알아 들을 수 있는 언어로 변환하는 작업을 미리 실행한다. 따라서, 변환 작업은 딱 한번만 수행한다.
  • JIT는 이 두 가지 방식을 혼합한 것이라고 보면 된다. 변환 작업은 인터프리터에 의해서 지속적으로 수행되지만, 필요한 코드의 정보는 캐시에 담아두었다가(메모리에 올려두었다가) 재사용하게 된다.
자바소스코드 -> 자바 컴파일러 -> 컴파일된 Bytecode -> JVM -> 기계코드 -> 하드웨어 및 OS
  • 이 절차에서 “JVM -> 기계코드”로 변환되는 부분을 JIT에서 수행하는 것이다. JIT를 사용하면 반복적으로 수행되는 코드는 매우 빠른 성능을 보인다는 장점이 있지만, 반대로 처음에 시작할 때 변환 단계를 거쳐야 하므로 성능이 느리다는 단점이 있다.
  • 하지만, CPU와 JDK성능 개선이 많아 해당 단점도 많이 개선되었다.

HotSpot 이란?

  • HotSpot클라이언트 컴파일러와 HotSpot 서버 컴파일러 의 두 가지 컴파일러를 제공한다.
  • CPU코어가 하나뿐인 사용자를 위해 만들어진 것이 HotSpot 클라이언트 컴파일러다. 이 컴파일러의 주요 특정은 애플리케이션 시작 시간을 빠르게하고, 적은 메모리를 점유하도록 하는 것이다.
  • 그리고 코어가 많은 장비에서 애플리케이션을 돌리기 위해 만들어진 것이 HotSpot 서버 컴파일러 라고 생각하면 된다. 이 컴파일러는 애플리케이션 수행 속도에 초점이 맞추어져 있다.

JVM

  • JVM : Java Virtual Machine(자바 가상 머신)
  • GC : Garbage Collector(가비지 컬렉터)
  • JVM은 우리가 작성한 자바 프로그램이 수행되는 프로세스를 의미한다. 즉, java라는 명령어를 통해서 애플리케이션이 수행되면, 이 JVM위에서 애플리케이션이 동작한다. 이 JVM에서 우리가 작성한 프로그램을 찾고 실행하는 일련의 작업이 진행된다.
  • 그리고 자바의 메모리 관리는 개발자가 하지 않아도 된다. 그 이유는 JVM이 알아서 하기 때문이다.
  • 이때 JVM내에서 메모리 관리를 해주는 것을 바로 “가비지 컬렉터”라고 부른다.