본문 바로가기

프로그래밍/Java

JAVA의 역사와 JVM-1

반응형

해당 포스트를 작성하는 목적

드디어 자바의신Vol2 에 진입했다. 자바의 역사와 JVM에 대해서 알아보는 단원인데, JVM에 관해서는 이미 앞서 진행했으므로, 크게 더 내용이 추가 될지는 모르겠다. 천천히 읽어보며, 미처 빠트린 내용이 있다면 이 포스트를 작성하며 다시 복습하고 가도록 하자.

자바의 역사

1991년 'Green'이라는 프로젝트가 생기면서 자바의 모태가 탄생했다. 초기엔 Oak라는 이름이었으나, 1995년 커피의 한종류인 자바커피에서 이름을 따 Java로 명명되며 본격적으로 시작되었다.

JDK와 JRE

  • JDK : Java Development Kit
  • JRE : Java Runtime Enviroment

JRE는 Java실행만을 위한 환경을 제공한다. 이 JRE만 설치하면 자바를 컴파일하는 등의 각종 프로그램이 제외된 상태로 설치된다. JDK는 Java를 개발하고 실행할 수 있는 모든 구성요소를 말한다.

https://laptrinhx.com/difference-between-jdk-jre-jvm-741282687/
https://beginnersbook.com/2013/05/jvm/

JVM과 JRE, JDK를 구분해서 이해하는 이유는 자바의 가장 큰 특징중 하나인 플랫폼 독립성 때문이다.

  1. JVM(Java Virtual Machine)

    JVM은 인터프리터로써 컴파일된 바이트 코드를 실행한다. 이때 바이트코드는 어떤 플랫폼에서도 사용가능하게 정의 되어있다. 즉 JVM이 바이트코드를 갖고, 어떤 OS,플랫폼이든 그에 맞는 기계어로 번역해줌으로써, 자바의 OS종속성이 해소되는것이다.

  1. JRE(Java Runtime Enviroment)

    JVM이 바이트코드의 내용을 인식하고, 실행하기 위해서는 바이트코드 속에서 사용된 기본 클래스나 메소드를 인식할 수있어야한다. 즉 JRE는 JVM이 구동되기 위한 환경을 제공한다고 볼수있다.

  1. JDK(Java Development Kit)

    JDK는 JVM,JRE를 모두 포함하며, 개발자를 위한 환경을 제공한다. JDK는 개발을 위해 필요한 온갖 API가 정의되어 있으며, 작성한 소스코드를 컴파일해 바이트코드로 생성하는 컴파일러도 있다.

정리하여 3가지 과정을 실제 개발과정의 측면으로 보자면,

코드작성(개발자) → 컴파일(JDK/컴파일러)→바이트코드→인터프리터/JIT(JVM, 이과정에서 JRE에서 제공하는 클래스와 메소드를 통해 기계어로 번역한다.) → 실행

💡
JDK11부터는 JRE와 JDK를 통합해서 배포한다.

자바의 버전별 차이

자바의 버전별 차이중 교재에서 서술한 꼭 알고 넘어가야 할 것들에 대해서만 정리하겠다. 자세히 알아보지는 않는다. 추후에 각 주제별 포스팅을 따로 작성해 보자.

  • JDK1.1에서 추가된 JDBC

    JDBC는 JavaDatabase Connectivity의 약자로, 자바에서 DB라는 저장소에 데이터를 담기 위한 API를 의미한다.

  • JDK1.2 JIT 컴파일러 추가

    JIT는 Just-In-Time의 약자로 메소드의 일부 혹은 전체코드를 네이티브 코드로 변환해 JVM에서 번역하지 않도록 함으로써 보다 빠른성능을 제공하는 기술이다.

  • JDK1.3 JNDI

    JNDI란 어떤 객체를 쉽게 찾을 수 있도록 도와주는 이름을 지정한 후, 나중에 그 이름으로 객체를 찾아가는 것을 의미한다. LDAP,DNS등 각종 주소를 쉽게 지정하기 위해서 사용된다.

  • JDK1.4 정규표현식과 NIO

    정규표현식은 어떤 문자열에서 특정 조건에 맞는 값이 있는지를 확인하는데 사용된다. 예를들어 어떤 문자열이 이메일주소의 조건에 맞는지, 웹페이지 주소를 나타내는 URL조건에 맞는지 등이 있다.

    NIO는 이전 버전까지의 IO를 처리할 때 사용한 java.io 패키지에서 제공하는 기능의 단점을 보완한 것이다. 기존 IO보다 어렵기는 하지만, 성능으 비교할 수 없을 정도로 빠르다.

  • JDK 5

    보다 안전하게 컬렉션 데이터를 처리할 수 있는 제네릭 추가

    어노테이션이라 불리는 메타데이터의 추가

    기본 자료형과 래퍼클래스들의 자동변환이 발생하는 오토박싱 및 언박싱

    enum의 추가

    매개변수의 개수를 가변적으로 선언할 수 있는 varargs추가(String... strs)

    향상된 for 루프문

    import 앞에 static을 붙여 정적 import가 가능한 static import의 추가

    쓰레드를 쉽게 처리하는 concurrent패키지

    스트림이나 버퍼로 들어오는 데이터의 분석(parse)를 보다 편하게 해주는 Scanner클래스의 추가

  • JDK 6

    각종 코어 기능의 성능 개선, Complier API 추가등...

  • JDK 7
    • 추후 각 주제별 포스팅으로 대체한다.
  • JDK 8

    람다표현식의 추가

해당 포스트를 작성하며 알게된 점

JDK와 JRE에 대한 차이점을 여태까지 모르고 있었다....

그래서 예전에 JRE만 다운받았을때는 이클립스 실행이 안됬던것 같다...

다행히 최신버전부터는 통합해서 배포하니, 그런 실수는 사라지겠다.

그리고 JDK버전 추가에 따른 공부를 해야하는것들이 눈에 보이기 시작한다... 양이 너무많다.. 아마 멘토링을 진행하면서 자연스럽게 공부하게 되겠지??

Reference

JDK & JRE & JVM 의 역할

[출처] JDK & JRE & JVM 의 역할

Difference between JDK, JRE, JVM

반응형

'프로그래밍 > Java' 카테고리의 다른 글

JAVA의 역사와 JVM-2  (0) 2021.05.18
GC  (0) 2021.05.18
Annotation  (0) 2021.05.17
Static 변수의 메모리 해제-Weak/Soft Reference  (0) 2021.05.17
클래스안의 클래스-2  (0) 2021.05.17