본문 바로가기
개발/JAVA

JAVA 17~21 변경점

by Remover 2023. 10. 20.
반응형

 

https://openjdk.org/projects/jdk/21/

 

JDK 21

JDK 21 This release is the Reference Implementation of version 21 of the Java SE Platform, as specified by JSR 396 in the Java Community Process. JDK 21 reached General Availability on 19 September 2023. Production-ready binaries under the GPL are avai

openjdk.org

JDK 21이 나옴에 따라 변경점에 대해서 알아보겠습니다.

Java 18

JEP 400: UTF-8 by Default
- Java APi의 Default Charset이 UTF-8로 변경되었습니다.

 

JEP 408: Simple Web Server
- simple webserver를 제공합니다.

$ jwebserver -p 9000

JEP 420: Pattern Matching for switch (Second Preview)
- Java 17에서 Preview 되었던 switch의 Pattern Matching의 preview의 2번째 preview입니다.

Java 19

JEP 405: Record Patterns (Preview)
- Switch Pattern과 더불어 Record 또한 Patterns을 사용할 수 있습니다.

record Point(int x, int y) {}

void printSum(Object o) {
    if (o instanceof Point(int x, int y)) {
        System.out.println(x+y);
    }
}

JEP 425: Virtual Threads (Preview)
- JDK21에서 출시되는 Virtual Thread의 Preview 버전이 공개되었습니다.

 

JEP 428: Structured Concurrency (Incubator)
- 멀티스레드 코드의 유지 관리성, 신뢰성 및 관찰 가능성을 향상 시키기 위한 작업이 진행되었습니다.

Java 20

JEP 429: Scoped Values (Incubator)
- Thread 내에서 그리고 Thread 간에 불변 데이터를 공유할 수 있는 범위 값을 도입합니다.

Java 21

JEP 439: Generational ZGC
- Generational ZGC를 제공합니다.
ZGC를 확장하여 young obejcts와 old objects에 대해 별도의 generation을 유지함으로써 성능을 향상 시킵니다.

java -XX:+UseZGC -XX:+ZGenerational

 

JEP 430: String Templates (Preview)
- 강화된 String을 제공합니다.
StringBuilder의 repeat를 통해 반복이 가능하며, String에서 이모지 판단이 가능합니다.

package bootiful.java21;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

class StringsTest {

    @Test
    void repeat() throws Exception {
        // ①
        var line = new StringBuilder()
                .repeat("-", 10)
                .toString();
        Assertions.assertEquals("----------", line);
    }

    @Test
    void emojis() throws Exception {
        // ②
        var shockedFaceEmoji = "\uD83E\uDD2F";
        var cp = Character.codePointAt(shockedFaceEmoji.toCharArray(), 0);
        Assertions.assertTrue(Character.isEmoji(cp));
        System.out.println(shockedFaceEmoji);
    }
}

JEP 431: Sequenced Collections
- Collection에 대한 새로운 인터페이스가 도입되었습니다.

package bootiful.java21;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;

import java.util.LinkedHashSet;
import java.util.SequencedCollection;

class SequencedCollectionTest {

    @Test
    void ordering() throws Exception {
        var list = LinkedHashSet.<String>newLinkedHashSet(100);
        if (list instanceof SequencedCollection<String> sequencedCollection) {
            sequencedCollection.add("ciao");
            sequencedCollection.add("hola");
            sequencedCollection.add("ni hao");
            sequencedCollection.add("salut");
            sequencedCollection.add("hello");
            sequencedCollection.addFirst("ola"); //<1>
            Assertions.assertEquals(sequencedCollection.getFirst(), "ola"); // ②
        }
    }
}

 

JEP 444: Virtual Threads

- 가상 Thread가 도입되었습니다. Virtual Thread는 경량 Thread 입니다.

 

try {
    Thread.Builder builder = Thread.ofVirtual().name("MyThread");
    Runnable task = () -> {
        System.out.println("Running thread");
    };
    Thread t = builder.start(task);
    System.out.println("Thread t name: " + t.getName());
    t.join();
} catch (InterruptedException e) {
    e.printStackTrace();
}

 

댓글