사용자 도구

사이트 도구


java:9

Java 9

Collection Factory Methods

  • Set.of, List.of, Map.of
  • 완전한 immutable 컬렉션을 만들어준다.
  • null 값을 넣을 수 없게 방어해준다.
  • Set,Map 은 중복값을 넣는 경우에도 오류를 발생시켜 방어해준다.
  • 컬렉션 크기가 명확하게 정해지기 때문에 공간 최적화가 된다.
  • Collections.unmodifiableXxx
    • 원본 컬렉션에 추가, 삭제 등이 일어나면 unmodifiable 컬렉션에 이 값이 반영된다. 즉, 완벽한 immutable 이 아니다.
    • null 값을 넣을 수 있다.

G1 GC

  • Java G1 GC가 기본 Garbage Collector 가 된다.

Compact Strings

  • 원래 Stringchar []로 표현되고 char는 UTF-16 으로 2byte 를 차지했다.
  • Java 9 에서는 byte[] 로 저장하여 1byte 단위로 공간을 차지하게 최적화 하였다.
  • Latin-1 문자로 이루어진 경우에는 coder 라는 String 의 내부 변수를 LATIN1으로 설정하여 1 바이트 단위로 읽고
  • UTF-16일 경우에는 coder 값을 UTF_16 으로 설정하고 2 바이트 단위로 읽는다.
  • StringBuilderStringBuffer에도 최적화가 반영되어있다.
  • Memory 사용량이 줄고 줄고 그로인해 GC도 적어지고 성능이 좋아졌다.

String Concat 개선

  • Java 8 에서는 문자열 연속 연결시에 자동으로 StringBuilder로 만들어주었었으나 이 경우 StringBuilder의 기본 버퍼 크기를 사용하면서 버퍼 크기 부족시 성능저하가 있을 수 있음.
  • Java 9 는 문자열 연속 + 연산시 invokeDynamic으로 StringBuilder를 동적으로 최적화 해서 호출한다.
  • 따라서 연속적인 문자열 + 연결은 그냥 +를 사용하는게 훨씬 빠르다. 물론 Java 9 이상을 target 으로 컴파일해야 한다.
“+ is no longer compiled to StringBuilder.” In their “Lessons from Today” slide, they state, “Use + instead of StringBuilder where possible” and “recompile classes for Java 9+.”

참고

Resourcebundle UTF-8

java.util.PropertyResourceBundle.encoding=ISO-8859-1
  • Properties 는 기본 ISO-8859-1 이고, 명시적으로 Reader 인코딩을 UTF-8로 지정해야만 한다.
java/9.txt · 마지막으로 수정됨: 2023/09/18 03:06 저자 kwon37xi