JavaRush /Java Blog /Random-KO /Java 12 출시: 새로운 기능은 무엇인가요?

Java 12 출시: 새로운 기능은 무엇인가요?

Random-KO 그룹에 게시되었습니다
그래서 Java는 12위로 등장했습니다. 그리고 비록 이것이 LTS 릴리스는 아니지만(즉, 장기 지원이 아닌, 오랫동안 지원될 릴리스는 아닙니다. 버전 11 은 8개 항목이 포함된 최초의 LTS 릴리스로 간주됩니다. 1년 지원 기간 ), 업데이트에 흥미로운 것들이 나타났습니다. 그 중 가장 중요한 것을 살펴보겠습니다. Java에서는 변경 제안을 jeps(JDK Enhancement Proposal에서 따옴)로 축약합니다. Java 12 출시: 새로운 기능은 무엇인가요?  - 1

가장 흥미로운 Jep의 JDK 12

189: Shenandoah: 일시 중지 시간이 짧은 가비지 수집기(실험) 가비지 수집기인 Shenandoah는 Java 스레드 실행과 동시에 정리하여 런타임을 줄이는 새로운 알고리즘을 사용합니다. 이 경우 Shenandoah의 일시정지 시간은 힙 크기에 관계없이 동일합니다. 개발자들이 이 기능을 새 릴리스에서 가장 중요한 기능 중 하나로 간주하고 있음에도 불구하고 어떤 이유로 Oracle은 "공식" 릴리스 빌드에 Sheandoah를 포함하지 않았습니다. 따라서 고급 Garbage Collector를 시험해 보려면 Azul 과 같은 타사 빌드를 사용해야 합니다 . 230: Microbenchmark Suite Microbenchmark는 일부 작은 요소의 성능을 측정하는 마이크로벤치마크입니다. Java에서는 JMH 프레임워크를 사용하여 작성되고 실행됩니다. 버전 12부터 JMH가 JDK에 추가되었으며 이미 테스트가 작성되어 있어 개발자의 작업이 더욱 편리해졌습니다. 325: Switch Expressions(미리보기) switch 문을 사용하여 표현식을 작성하는 새로운 형태입니다. 기능 페이지에서는 전통적인 스위치를 사용하는 예제 코드를 제공합니다. 여기서 break를 계속 사용하면 불필요하게 장황해져서 빈번한 무작위 오류가 발생합니다.
switch (day) {
    case MONDAY:
    case FRIDAY:
    case SUNDAY:
        System.out.println(6);
        break;
    case TUESDAY:
        System.out.println(7);
        break;
    case THURSDAY:
    case SATURDAY:
        System.out.println(8);
        break;
    case WEDNESDAY:
        System.out.println(9);
        break;
}
업데이트 작성자는 이 레이블이 적합한 경우 레이블 오른쪽에 있는 코드만 실행된다는 점을 명확하게 나타내기 위해 스위치 레이블 "case L ->"의 새로운 형식을 도입할 것을 제안합니다. 따라서 위에 표시된 코드는 새로운 구문을 사용하여 상당히 단축될 수 있습니다.
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);
}
334: JVM 상수 API 상수 풀에는 소위 로드 가능한 상수가 포함되어 있습니다. 이는 문자열 유형 또는 기본 유형과 같은 값뿐만 아니라 클래스 및 메소드와 같은 런타임 아티팩트입니다. 클래스 파일로 작업할 때 프로그래머는 로드 가능한 상수를 조작하기 위한 편리한 도구를 활용할 수 있습니다. 이 jep의 저자는 각각 특정 유형의 상수를 설명하는 새로운 값 기반 유형의 기호 링크를 도입하여 이 문제를 해결하기 시작했습니다. 혁신코드 . 340: 두 개가 아닌 하나의 AArch64 포트 이 복잡한 이름은 Oracle의 64비트 ARM 포트와 Red Hat의 aarch64 포트가 동시에 키트에 나타날 때 Java 9에서 발생한 문제에 대한 솔루션을 숨깁니다. 게다가 이미 JDK 11이 출시될 당시 Oracle 자체도 64비트 버전의 Oracle 포트를 지원하지 않았습니다. 따라서 이제 64비트 Oracle 포트가 제거되어 32비트 ARM32와 더 생산적인 64비트 aarch64가 남습니다. 341: 기본 CDS 아카이브 응용 프로그램 실행 속도를 실제로 높여주는 매우 훌륭한 업데이트입니다. Java 애플리케이션이 시작되면 엄청난 수의 클래스가 로드되기 시작하며 이는 다소 긴 프로세스라는 것은 비밀이 아닙니다. CDS는 클래스 데이터 공유(Class Data Sharing)를 의미하며, 이 기능을 사용하면 동일한 클래스의 기본 목록을 사용하여 시작 시 시작된 모든 클래스를 특수 클래스 데이터 공유 아카이브로 묶을 수 있습니다. 결과적으로 애플리케이션 실행 속도가 크게 향상됩니다. 344: G1에 대한 중단 가능한 혼합 컬렉션 G1은 병렬 GC를 대체하는 JDK 9의 주요 가비지 수집기가 된 가비지 수집기입니다. Java 10에서 G1은 여러 스레드에서 가비지를 수집하는 방법을 배웠습니다. 그러나 모든 사람이 그의 작업에 만족한 것은 아니었으며, 주요 문제 중 하나는 긴 일시 중지였습니다. 이제 취소할 수 있습니다. G1은 프로그램 동작 분석을 기반으로 작업량을 결정한 다음 중단 없이 모든 것을 수집할 때까지 "라이브" 개체를 컬렉션 세트로 수집합니다. 종종 G1은 작업량 계산을 놓치고 너무 오랫동안 작업했습니다. jep-344가 구현되면 G1은 증분 가비지 수집으로 전환할 수 있으며, 다음 단계를 완료하는 데 합리적인 것보다 시간이 더 오래 걸리면 해당 단계를 중단할 수 있습니다. 346: G1에서 사용되지 않은 커밋된 메모리를 즉시 반환 그리고 앞서 언급한 G1 어셈블러 캠프에 몇 가지 추가 업데이트가 있습니다. 때로는 Java 힙 메모리가 잔뜩 있었지만 아무도 사용하지 않는 경우가 있었습니다. 바로 이 메모리입니다. Java 12에서는 이제 비활성 메모리를 운영 체제에 "반환"할 수 있습니다. 이전에는 G1이 메모리를 포기하는 경우가 매우 드물었지만 이제는 모든 것이 단순화되었습니다. 새로운 기능을 사용하면 마지막 빌드 이후 간격이 만료되고 동시 주기가 없는 경우 애플리케이션이 비활성으로 정의됩니다. 또 다른 상황은 한동안 모니터링된 getloadavg() 함수가 허용 가능한 임계값 설정보다 낮은 로드를 표시하는 경우입니다. 두 가지 이벤트 중 하나가 발생하면 부분 가비지 수집이 시작됩니다. Java 12에 없는 것: 원시 문자열 리터럴 많은 개발자가 이 기능에 관심이 있었지만 이번 릴리스에는 나타나지 않았습니다. 저자는 여전히 작업이 필요하다고 결정했습니다. 따라서 우리는 문자열 리터럴을 사용한 편리한 작업을 위한 함수가 다음 버전의 Java 중 하나에 나타날 것이라고 감히 희망합니다. 원시 문자열 리터럴에 대한 지원을 통해 언어에 관계없이 문자열 정보로 작업할 수 있습니다. 이렇게 하면 차폐가 필요하지 않습니다. 백슬래시가 널리 사용되는 정규식과 백슬래시가 구분 기호로 사용되는 Windows 경로에서 특히 유용합니다. 즉, 이러한 구성을 피하려면 C:\\My\\Test\\Pack\\
모든 프로그래머는 종종 작업에서 하나 또는 다른 어려움에 직면합니다. 때로는 개발자의 경험 부족과 관련이 있지만 때로는 도구 자체의 불완전성과 관련이 있습니다. Java는 훌륭한 언어이지만 완벽함과는 거리가 멀습니다. 아마도 당신은 이미 Java에서 뭔가를 접했고 "도구"(언어)에서 무엇을 바꾸고 싶은지 알고 있습니까? 댓글로 공유해주세요!

결론

Java 12에는 혁명이 없었습니다. 그러나 아무도 그것을 계획하지 않았습니다. 그러나 애플리케이션 작동을 최적화하고 작업 속도를 높이는 것을 목표로 하는 수많은 혁신이 이루어지고 있는데 이는 좋은 소식입니다. 그런데 IDEA는 이미 JDK 12를 지원하므로 해당 기능을 시험해 볼 수 있습니다. 물론 JavaRush를 막 배우기 시작한 사람이라도 (--enable-preview 플래그를 설정한 후) 새 스위치를 사용할 수 있지만 초보자에게 직접적인 영향을 미치는 업데이트는 거의 없습니다.
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION