JDK 18 훑어보기

sania Ka·2022년 3월 26일
2
post-thumbnail

https://openjdk.java.net/projects/jdk/18/

지난 3월 22일 JDK18이 General Availability로 출시되었다.
이 글에서는 간단하게 무슨 변경점이 있는지 살펴본다.

UTF-8 by Default

400: UTF-8 by Default
Java API의 기본 문자 집합으로 UTF-8이 사옹된다. 이는 모든 구현, 운영체제, 로케일에서 일관되게 동작한다.
이전에는 운영체제, 로케일 등의 런타임 환경을 기반으로 기본 문자 집합을 선택했다.
기존 프로그램에서 UTF-8이 아니라 다른 문자집합을 사용하고 있었다면, JDK18로 변경시에 주의가 필요할 것이다.

Simple Web Server

408: Simple Web Server
간단하게 사용할 수 있는 정적 HTTP 파일서버가 추가된다.
기본적으로는 명령줄에서 jwebserver 를 실행하여 동작시킬수 있다.
정말 간단한 서버이므로 HTTPS 지원이 되지 않고, HTTP/1.1만 지원된다. 따라서 보안문제가 있을수 있으므로 테스트용으로만 사용하는것이 좋겠다.

Code Snippets in Java API Documentation

413: Code Snippets in Java API Documentation
JavaDocs를 작성할때 기존의 <pre>{@code ...}</pre> 태그를 사용하지 않아도, 편하게 코드 조각을 삽입할 수 있게 되었다. @snippet를 사용하여 코드 또는 파일을 JavaDocs에 포함할 수 있다. @highlight, @replace 등의 태그를 사용하여 추가적인 수정을 가할 수 있다.

Reimplement Core Reflection with Method Handles

416: Reimplement Core Reflection with Method Handles
Method, Constructor, Field를 메서드 핸들을 사용하도록 재구현한다. 메서드 핸들이 초기화 되기 전인 VM 시작 초기에만 기존 리플렉션 메커니즘을 사용하고, 이후에는 메서드 핸들만 사용하도록 한다. 성능이 좋아지고, Project Loom에 도움을 준다고 하는데, 확인이 필요하겠다.

Vector API (Third Incubator)

417: Vector API (Third Incubator)
java.util.Vector와는 다른 Vector이다. 현재는 jdk.incubator.vector.Vector에 속한다.
산술 벡터연산을 위한 api이며, java의 기본형 숫자타입들인 byte, short, int, long, float, double형을 지원하는 ByteVector, ..., DoubleVector가 존재한다.
CPU 아키텍쳐가 지원하는 최적의 명령어로 컴파일하여 우수한 성능을 달성하는것이 목적이다.

Internet-Address Resolution SPI

418: Internet-Address Resolution SPI
호스트 및 주소확인을 위한 Spi resolver를 추가하였다. 기존 InetAddress 하위의 메서드는 OS 기본 resolver를 사용해서 조회를 했었다. jdk 18버전에서 java.util.spi 패키지 하위에 InetAddressResolverProvider, InetAddressResolver가 추가되었다. 기존 InetAddress의 getCanonicalHostName 등에서 NameService 대신 사용하도록 변경되었다.

Foreign Function & Memory API (Second Incubator)

419: Foreign Function & Memory API (Second Incubator)
jdk.incubator.foreign 패키지에 외부함수 및 메모리 관련 API가 추가되었다.
CLinker를 통해 시스템 C 링커를 호출하여 c 함수를 불러 사용 할 수 있으며, MemorySegment를 사용하여 직접 메모리를 할당할 수도 있다.
아직 Incubator 이므로, 변경 될 수 있다.

Pattern Matching for switch (Second Preview)

420: Pattern Matching for switch (Second Preview)
switch-case문을 보다 효과적으로 사용하기 위해 패턴매칭을 추가한다.
기존 if-instanceof 연산자를 사용하여 타입확인 및 캐스팅을 하는것이 아니라 swich-case에서 판별하여 사용할 수 있게 되었다. 물론 아직 preview이므로 변경될 가능성이 있다.

Deprecate Finalization for Removal

421: Deprecate Finalization for Removal
finalize가 향후 버전에서 제거하기 위해 deprecate 된다.

0개의 댓글