개발/Spring

자바(JDK)의 버전별 차이 (JDK 1.0 ~ 1.2)

728x90

현업에서 JDK (1.0~1.3)으로 운영중인 시스템은 찾아보기 매우 어려울 것이다. 그래서 1.3까지는 간단하게 살펴보자

 

JDK 1.0 가장 최초의 버전

 

그 후에 나온 마이너 버전은

 

JDK 1.0.2 버전 -> 최초의 안정 버전

 

JDK 1.1에서 추가 된 것들

 

AWT의 이벤트 모델의 확장 및 변경

내부 클래스(inner class)의 추가

JavaBeans, JDBC, RMI등 추가

 

(AWT : Abstract Window Tookit의 약자, 자바를 이용하여 UI를 구성할 때 사용되는 기반 기술.)

(JDBC : Java Database Connectivity 자바에서 저장소에 데이터를 담기 위한 API)

(RMI : Remote Method Invocation의 약자로 리모트에 있는 JVM에 있는 메소드를 호출하기 위한 기술을 의미)

 

JDK 1.2에서 달라진 점. 추가된 점.

 

 

JDK 1.2~ 1.5버전 까지는 J2SE(Java 2 Platform, Standard Edition)으로 불렸으며, 새로운 버전이라는 의미에서 Java 2 라는 이름이 생겼다.

 

모바일 디바이스를 위한 J2ME나 Enterprise 버전을 의미하는 J2EE와 구분하기 위해서 이름을 J2SE라고 구분하기 시작함.

 

 

  • strictfp 예약어 추가
  • 자바에서 GUI환경 제공하기 위한 Swing 코어 라이브러리에 추가
  • JIT라는 컴파일러가 Sun JVM에 처음 추가
  • 자바 플러그인 추가
  • CORBA라는  데이터를 주고 받기 위한 IDL추가
  • 자바에서 각종 자료 구조를 쉽게 처리하기 위한 Collections라는 프레임워크 추가

 

strictfp 예약어 : 플랫폼 간 부동소수점 연산의 결과를 동일하게 해주는 접근제어자

자바에서 동일한 코드라도 플랫폼에 따라 Float나 Double의 정밀도가 달라질 수 있다.

플랫폼이 자바보다 더 큰 수를 표현 가능하다면 자바의 부동소수점 표현 범위를 벗어나기 때문에

부동소수점 숫자의 정밀도를 보장하기 위해서는 

strictfp class Example {

public static void main(String[] args) {

    double d = Double.MAX_VALUE;

    System.out.println(d*1.1); 

}

}

위와 같이 사용 해야 한다.

 

 

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

 

자바 코드는 JavaCompiler를 통해 ByteCode로 변환된다. 그리고 Byte코드는 다시 기계어로 번역된다.

Java는 인터프리터 방식의 컴파일 방식을 사용한다. 하지만 문제점이 있다. Java compiler는 Java 파일을 ByteCode로 변환 한 후 다시 기계어로 변환을 하는 작업이 있고 이 작업이 비용이 많이 든다. 이런 단점을 극복하기 위해 JIT(Just In Time) 방식이 나왔다.

자바 소스코드 -> 자바 바이트코드 -> 기계어로의 변환 과정

JIT 방식은 실행 시점에 자주 쓸만한 코드들을 기계어로 변환 시켜놓고 저장해 뒀다가, 재사용 할 때 이미 변환된 기계어 코드를 재 사용 하는 방식을 말한다. 즉 해당 기계어 코드를 캐싱한다. 물론 이 과정을 하기 위해 초반에 메모리를 잡아두거나 하는 선행 작업들이 있어서 초기 실행 속도는 다소 느릴 수도 있다. 하지만 그 이후로는 ByteCode를 사용 할 때마다 네이티브 코드로 변환하는 작업이 들어 실행속도가 많이 향상된다. 코드가 재사용될 일이 없거나 규모가 작은 프로그램에서는 배 보다 배꼽이 더 클 수도 있지만 일반적으로 빠른 속도를 자랑한다.

'개발 > Spring' 카테고리의 다른 글

JIT란?  (0) 2021.02.27
자바(JDK)의 버전별 차이 JDK 1.4  (0) 2021.02.27
자바(Java)의 역사  (0) 2021.02.27
왜 Static변수를 난발하면 안될까?  (0) 2021.02.25
객체지향 핵심 키워드 (자바의 신 요약본 - 0)  (0) 2021.02.20