Develop/java,spring

JAVA 버전별 특징

kudl 2020. 11. 20. 14:39

JAVA 8

  • 기본 GC > Parallel GC
  • Lambda Expression
  • Repeating Annotation
      import java.lang.annotation.Repeatable;
      import java.lang.annotation.Retention;
      import java.lang.annotation.RetentionPolicy;
    
      @Repeatable(Colors.class)
      @interface Color {
          String name();
      }
    
      @Retention(RetentionPolicy.RUNTIME)
      @interface Colors {
          Color[] value();
      }
    
      @Color(name = "red")
      @Color(name = "blue")
      @Color(name = "green")
      class Shirt {
    
      }

사용

public class RepeatingAnnotations {
        public static void main(String args[]) {
            Color[] colorArray = Shirt.class.getAnnotationsByType(Color.class);
            for (Color color : colorArray) {
                System.out.println(color.name());
            }
        }
    }
  • 새로운 날짜와 시간 API(LocalDate, LocalTIme, LocalDateTime)
  • Interface Default Method
  • Stream API

JAVA 9

  • Java를 인터프리터 언어 셸처럼 사용할 수 있는 JShell이 추가
  • private 인터페이스 메소드
  • immutable collection
  • 64비트 버전만 출시
  • 프로퍼티 파일에 UTF-8 지원

JAVA 10

  • var 키워드를 이용한 지역 변수 타입 추론
  • 병렬 처리 가비지 컬렉션
  • 개별 쓰레드로 분리된 Stop-The-World
  • 루트 CA 목록

JAVA 11

  • 기본 GC > G1 GC
  • 람다 파라미터에 대한 지역 변수 문법
  • 엡실론 가비지 컬렉터
    • 엡실론 가비지 수집기는 할당을 처리하지만 메모리를 회수하지는 않는고 힙이 소진되면 JVM이 종료된다. 엡실론은 수명이 짧은 서비스와 가비지를 사용하지 않는 것으로 알려진 애플리케이션에 유용하다.
    • Epsilon GC를 사용할 경우 우리가 작성한 어플리케이션이 외부 환경으로부터 고립된 채로 실행되기 때문에 실제 내 어플리케이션이 얼마나 메모리를 사용하는 지에 대한 임계치나 어플리케이션 퍼포먼스 등을 보다 정확하게 측정할 수 있다.
  • HTTP 클라이언트 표준화(HttpClient 추가)

JAVA 12

  • Shenandoah GC 추가. Shenandoah는 ZGC와 비슷하게 대량의 메모리 처리에 우수한 퍼포먼스를 내지만 좀 더 많은 옵션을 제공한다는 장점이 있다. Shenandoah는 레드 햇에서 개발한 GC인데, 실제로는 ZGC보다 앞선 Java 8부터 개발하기 시작해서 12가 나올 때 release를 하였다
  • Switch 문 확장
    switch (day) {
      case MONDAY, FRIDAY, SUNDAY -> System.out.println(6);
      case TUESDAY                -> System.out.println(7);
      case THURSDAY, SATURDAY     -> System.out.println(8);
      case WEDNESDAY              -> System.out.println(9);
    }

     

  •  

    Microbenchmarking(마이크로밴치마킹) : org.openjdk.jmh

JAVA 13

  • switch yield 예약어가 추가
var a = switch (day) {
  case MONDAY, FRIDAY, SUNDAY:
      yield 6;
  case TUESDAY:
      yield 7;
  case THURSDAY, SATURDAY:
      yield 8;
  case WEDNESDAY:
      yield 9;
};

JAVA 14

  • instanceof 패턴 매칭
if (!(obj instanceof String s)) {
  .. s.contains(..) ..
} else {
  .. s.contains(..) ..
}
  • record 타입 지원
record Point(int x, int y) { }

JAVA 15

  • EdDSA 암호화 알고리즘 추가
  • 패턴 매칭
  • 스케일링 가능한 낮은 지연의 가비지 컬렉터 추가(ZGC)
  • Solaris 및 SPARC 플랫폼 지원 제거
  • 외부 메모리 접근 API (인큐베이팅)
  • 클래스 봉인 (미리보기)
    • 상속 가능한 클래스를 지정할 수 있는 봉인 클래스가 제공된다.
    • 상속 가능한 대상은 상위 클래스 또는 인터페이스 패키지 내에 속해 있어야 한다.
      package com.example;
      
      public sealed class Animal
      	Dog,
      		com.example.Monkey,
      		com.example.Leopard
      {
      	// ...
      }
  • 다중 텍스트 블록
String html = """

		Hello, world

	""";

 

'Develop > java,spring' 카테고리의 다른 글

Okta(옥타) SSO(OIDC - Open ID Connect Application) 로그인  (1) 2020.11.30
Java Stream GroupingBy 사용  (0) 2020.11.26
JAVA var 키워드  (0) 2020.11.18
JPA 순환 참조 해결 방법  (0) 2020.11.17
Intellij 단축키  (0) 2020.11.12