logo

자바 8 기능

Oracle은 2014년 3월 18일에 Java 8이라는 새 버전의 Java를 출시했습니다. 이는 소프트웨어 개발 플랫폼을 위한 혁신적인 Java 릴리스였습니다. 여기에는 Java 프로그래밍, JVM, 도구 및 라이브러리에 대한 다양한 업그레이드가 포함됩니다.

Java 8 프로그래밍 언어 향상

Java 8은 Java 프로그래밍을 위해 다음 기능을 제공합니다.

  • 람다식,
  • 방법 참조,
  • 기능적 인터페이스,
  • 스트림 API,
  • 기본 방법,
  • Base64 인코딩 디코딩,
  • 인터페이스의 정적 메소드
  • 선택 수업,
  • 컬렉터 클래스,
  • ForEach() 메서드,
  • Rhino 자바스크립트 엔진,
  • 병렬 배열 정렬,
  • 유형 및 반복 주석,
  • IO 향상,
  • 동시성 향상,
  • JDBC 개선 등

람다 표현식

람다 표현식은 함수형 스타일로 코드를 작성하는 데 도움이 됩니다. 표현식을 사용하여 SAM 인터페이스(Single Abstract Method)를 구현하는 명확하고 간결한 방법을 제공합니다. 데이터를 반복, 필터링 및 추출하는 데 도움이 되는 컬렉션 라이브러리에 매우 유용합니다.

자세한 내용과 예시는 다음을 참조하세요. 여기를 클릭하세요


메소드 참조

Java 8 메소드 참조는 기능적 인터페이스의 메소드를 참조하는 데 사용됩니다. 람다 표현의 간결하고 쉬운 형태입니다. 메서드를 참조하기 위해 람다 식을 사용할 때마다 람다 식을 메서드 참조로 바꿀 수 있습니다.

자세한 내용과 예시는 다음을 참조하세요. 여기를 클릭하세요


기능적 인터페이스

하나의 추상 메서드만 포함하는 인터페이스를 기능적 인터페이스라고 합니다. 기본 메소드와 정적 메소드는 원하는 만큼 가질 수 있습니다. 객체 클래스의 메소드를 선언할 수도 있습니다.

기능적 인터페이스는 단일 추상 메서드 인터페이스(SAM 인터페이스)라고도 합니다.

자세한 내용과 예시는 다음을 참조하세요. 여기를 클릭하세요


선택 과목

Java는 Java 8에서 새로운 클래스 Optional을 도입했습니다. 이는 Java 애플리케이션에서 NullPointerException을 처리하는 데 사용되는 공개 최종 클래스입니다. 우리는 수입해야 한다 java.util 이 클래스를 사용하기 위한 패키지입니다. 특정 변수에 대한 값의 존재 여부를 확인하는 방법을 제공합니다.

자세한 내용과 예시는 다음을 참조하세요. 여기를 클릭하세요


각각

Java는 요소를 반복하는 새로운 메소드 forEach()를 제공합니다. Iterable 및 Stream 인터페이스에 정의되어 있습니다.

Iterable 인터페이스에 정의된 기본 메서드입니다. Iterable 인터페이스를 확장하는 컬렉션 클래스는 forEach() 메서드를 사용하여 요소를 반복할 수 있습니다.

이 메소드는 기능적 인터페이스인 단일 매개변수를 사용합니다. 따라서 람다 식을 인수로 전달할 수 있습니다.

자세한 내용과 예시는 다음을 참조하세요. 여기를 클릭하세요


날짜/시간 API

Java는 Java 8부터 새로운 날짜 및 시간 API를 도입했습니다. java.time 패키지에는 Java 8 날짜 및 시간 클래스가 포함되어 있습니다.

자세한 내용과 예시는 다음을 참조하세요. 여기를 클릭하세요


기본 방법

Java는 인터페이스 내부에 기본 메소드를 생성하는 기능을 제공합니다. 인터페이스 내부에 정의되고 default 키워드로 태그가 지정된 메소드를 기본 메소드라고 합니다. 이러한 메서드는 추상이 아닌 메서드이며 메서드 본문을 가질 수 있습니다.

자세한 내용 및 예시를 보려면 여기를 클릭하세요.


Rhino 자바스크립트 엔진

Nashorn은 JavaScript 엔진입니다. JVM(Java Virtual Machine)에서 JavaScript 코드를 동적으로 실행하는 데 사용됩니다. Java는 명령줄 도구를 제공합니다. JavaScript 코드를 실행하는 데 사용됩니다.

다음 두 가지 방법으로 JavaScript 코드를 실행할 수 있습니다.

  1. jjs 명령줄 도구 사용
  2. Java 소스 코드에 삽입합니다.

자세한 내용 및 예시를 보려면 여기를 클릭하세요.


스트링조이너

Java는 java.util 패키지에 새로운 최종 클래스 StringJoiner를 추가했습니다. 구분 기호로 구분된 일련의 문자를 구성하는 데 사용됩니다. 이제 쉼표(,), 하이픈(-) 등과 같은 구분 기호를 전달하여 문자열을 생성할 수 있습니다.

자바의 문자열과 비교

자세한 내용 및 예시를 보려면 여기를 클릭하세요.


수집가

Collectors는 Object 클래스를 확장한 최종 클래스입니다. 요소를 컬렉션으로 축적하고, 다양한 기준에 따라 요소를 요약하는 등의 축소 작업을 제공합니다.

자세한 내용과 예시는 다음을 참조하세요. 여기를 클릭하세요


스트림 API

Java 8 java.util.stream 패키지는 요소에 대한 기능적 스타일 작업을 허용하는 클래스, 인터페이스 및 열거형으로 구성됩니다. 게으른 계산을 수행합니다. 따라서 필요할 때만 실행됩니다.

자세한 내용과 예시는 다음을 참조하세요. 여기를 클릭하세요


스트림 필터

Java 스트림은 주어진 조건에 기초하여 스트림 요소를 필터링하는 filter() 메소드를 제공합니다. 목록의 짝수 요소만 가져오고 싶다고 가정해 보겠습니다. filter() 메서드를 사용하면 쉽게 이 작업을 수행할 수 있습니다.

이 메서드는 조건자를 인수로 사용하고 결과 요소의 스트림을 반환합니다.

자세한 내용과 예시는 다음을 참조하세요. 여기를 클릭하세요


Java Base64 인코딩 및 디코딩

Java는 암호화 및 암호 해독을 처리하기 위해 Base64 클래스를 제공합니다. 메소드를 사용하려면 소스 파일에서 java.util.Base64 클래스를 가져와야 합니다.

이 클래스는 각 수준에서 정보를 암호화하기 위해 세 가지 서로 다른 인코더와 디코더를 제공합니다.

자세한 내용과 예시는 다음을 참조하세요. 여기를 클릭하세요


Java 병렬 배열 정렬

Java는 배열 요소를 병렬로 정렬하는 데 사용되는 Arrays 클래스에 새로운 추가 기능을 제공합니다. JSR 166 Fork/Join 병렬 처리 공통 풀을 사용하여 배열 정렬을 제공하는 java.util.Arrays 클래스에 ParallelSort() 메서드가 추가되었습니다. 오버로드된 방법입니다.

자세한 내용 및 예시를 보려면 여기를 클릭하세요.


Java 8 보안 강화

1) JSSE(Java Secure Socket Extension) 공급자는 클라이언트 측에서 기본적으로 TLS(전송 계층 보안) 1.1 및 TLS 1.2 프로토콜을 활성화합니다.

2) 다른 권한을 확인하기 위해 스택 전체를 순회하는 것을 막지 않고도 코드가 해당 권한의 하위 집합을 주장할 수 있도록 하는 향상된 메서드 AccessController.doPrivileged가 추가되었습니다.

3) PBEWithSHA256AndAES_128 및 PBEWithSHA512AndAES_256과 같은 AES(고급 암호화 표준) 및 PBE(암호 기반 암호화) 알고리즘이 SunJCE 공급자에 추가되었습니다.

4) SunJSSE(Java Secure Socket Extension)는 JDK 7에서 기본적으로 클라이언트 애플리케이션에 대한 SNI(Server Name Indication) 확장을 활성화했으며 JDK 8은 서버 애플리케이션에 대한 SNI 확장을 지원합니다. SNI 확장은 SSL/TLS 프로토콜을 확장하여 클라이언트가 핸드셰이킹 중에 연결을 시도하는 서버 이름을 나타내는 기능입니다.

5) SunJSSE는 AEAD(Authenticated Encryption with Associated Data) 알고리즘을 지원하도록 향상되었습니다. SunJCE(Java Cryptography Extension) 공급자는 AES/GCM/NoPadding 암호화 구현은 물론 Galois/Counter Mode(GCM) 알고리즘 매개변수를 지원하도록 향상되었습니다.

6) 새로운 명령 플래그 -importpassword가 keytool 유틸리티에 추가되었습니다. 비밀번호를 수락하고 이를 비밀 키로 안전하게 저장하는 데 사용됩니다. DKS 키 저장소 유형을 지원하기 위해 java.security.DomainLoadStoreParameter 및 java.security.PKCS12Attribute와 같은 클래스가 추가되었습니다.

문자열을 int로 캐스트

7) JDK 8에서는 SHA-2 메시지 다이제스트 구현 제품군의 SHA-224 변형을 통해 암호화 알고리즘이 향상되었습니다.

8) 다음을 포함하는 NSA Suite B 암호화에 대한 향상된 지원:

  • NSA Suite B 암호화 알고리즘에 대한 OID 등록
  • 2048비트 DSA 키 쌍 생성을 지원하고 SHA224withDSA 및 SHA256withDSA와 같은 2048비트 DSA 키에 대한 추가 서명 알고리즘을 지원합니다.
  • DH(Diffie-Hellman) 알고리즘에 대한 키 크기 제한을 1024에서 2048로 해제합니다.

9) SecureRandom 클래스는 개인 또는 공개 키, 암호 및 서명된 메시지에 사용되는 암호화된 강력한 난수 생성을 제공합니다. getInstanceStrong() 메소드는 JDK 8에서 도입되었으며 가장 강력한 SecureRandom의 인스턴스를 반환합니다. RSA 개인키와 공개키를 생성해야 할 때 사용해야 합니다. SecureRandom에는 다음과 같은 다른 변경 사항이 포함됩니다.

  • 차단 및 비차단 동작을 제공하는 두 가지 새로운 구현이 UNIX 플랫폼에 도입되었습니다.

10) PKIX 알고리즘을 사용하여 인증서의 해지 상태를 확인하는 새로운 PKIXRevocationChecker 클래스가 포함되었습니다. 최선의 확인, 최종 엔터티 인증서 확인 및 메커니즘별 옵션을 지원합니다.

11) 공개 키 암호화 표준 11(PKCS)이 Windows에 대한 64비트 지원을 포함하도록 확장되었습니다.

12) 두 가지 새로운 rcache 유형이 Kerberos 5에 추가되었습니다. none 유형은 rcache가 전혀 없음을 의미하고 dfl 유형은 DFL 스타일 파일 기반 rcache를 의미합니다. 또한 수락자 요청 하위 키가 이제 지원됩니다. sun.security.krb5.rcache 및 sun.security.krb5.acceptor.subkey 시스템 등록 정보를 사용하여 구성됩니다.

13) JDK 8에서는 Kerberos 5 프로토콜 전환 및 제한 위임이 동일한 영역 내에서 지원됩니다.

14) Java 8은 기본적으로 약한 암호화를 비활성화했습니다. DES 관련 Kerberos 5 암호화 유형은 기본적으로 지원되지 않습니다. 이러한 암호화 유형은 krb5.conf 파일에allow_weak_crypto=true를 추가하여 활성화할 수 있습니다.

15) 바인딩되지 않은 서버를 나타내기 위해 서버 이름을 null로 설정할 수 있습니다. 이는 클라이언트가 임의의 서버 이름을 사용하여 서비스를 요청할 수 있음을 의미합니다. 컨텍스트가 설정된 후 서버는 키 이름 SASL.BOUND_SERVER_NAME을 사용하여 협상된 속성으로 이름을 검색할 수 있습니다.

16) 이제 기본 JGSS(Java Generic Security Service)에 대한 JNI(Java Native Interface) 브리지가 Mac OS X에서 지원됩니다. 시스템 속성 sun.security.jgss.native를 true로 설정하여 활성화할 수 있습니다.

17) 임시 DH 키 크기를 사용자 정의하기 위해 새로운 시스템 속성인 jdk.tls.ephemeralDHKeySize가 정의되었습니다. 허용되는 최소 DH 키 크기는 1024비트입니다. 단, 내보낼 수 있는 암호 그룹 또는 레거시 모드(jdk.tls.ephemeralDHKeySize=legacy)는 제외됩니다.

18) JSSE(Java Secure Socket Extension) 공급자는 기본적으로 클라이언트의 암호화 제품군 기본 설정을 존중합니다. 그러나 서버를 통해 SSLParameters.setUseCipherSuitesOrder(true)를 호출하여 서버의 암호화 제품군 기본 설정을 존중하도록 동작을 변경할 수 있습니다.


Java 8 도구 개선 사항

1) 대화형 쉘 모드에서 또는 스크립트 파일을 해석하기 위해 Nashorn 엔진을 호출하는 jjs 명령이 도입되었습니다.

2) JavaFX 애플리케이션이 올바르게 패키지된 경우 java 명령은 JavaFX 애플리케이션을 시작할 수 있습니다.

3) java 명령 매뉴얼 페이지(nroff 및 HTML 모두)가 완전히 재작업되었습니다. 고급 옵션은 이제 영향을 받는 영역에 따라 런타임, 컴파일러, 가비지 수집 및 서비스 가능성으로 구분됩니다. 이전에 누락된 몇 가지 옵션이 이제 설명됩니다. 이전 릴리스 이후 더 이상 사용되지 않거나 제거된 옵션에 대한 섹션도 있습니다.

4) 새로운 jdeps 명령줄 도구를 사용하면 개발자가 클래스 파일을 분석하여 패키지 수준 또는 클래스 수준 종속성을 확인할 수 있습니다.

5) 이전에는 jcmd 도구를 통해 로컬로만 액세스할 수 있었던 진단 명령을 원격으로 액세스할 수 있습니다. 원격 액세스는 JMX(Java Management Extensions)를 사용하여 제공되므로 진단 명령은 플랫폼 MBean 서버에 등록된 플랫폼 MBean에 노출됩니다. MBean은 com.sun.management.DiagnosticCommandMBean 인터페이스입니다.

6) 새로운 옵션 -tsapolicyid가 jarsigner 도구에 포함되어 있어 Time Stamping Authority에서 서명된 타임스탬프를 요청하고 이를 서명된 JAR 파일에 첨부할 수 있습니다.

7) 모든 메소드 또는 생성자의 형식 매개변수 이름에 액세스할 수 있는 새로운 메소드 java.lang.reflect.Executable.getParameters가 포함되었습니다. 그러나 .class 파일은 기본적으로 형식적인 매개변수 이름을 저장하지 않습니다. 특정 .class 파일에 형식 매개변수 이름을 저장하여 Reflection API가 형식 매개변수 이름을 검색할 수 있도록 하려면 javac 컴파일러의 -parameters 옵션을 사용하여 소스 파일을 컴파일하십시오.

8) JLS(Java 언어 사양) 섹션 15.21의 이진 비교에 대한 유형 규칙이 이제 javac에 의해 올바르게 적용됩니다.

9) 이번 릴리스에서는 com.sun.mirror 패키지에 포함된 apt 도구 및 관련 API가 제거되었습니다.

Javadoc 향상

Java SE 8에서는 다음과 같은 새로운 API가 Javadoc 도구에 추가되었습니다.

  • 새로운 DocTree API에는 추상 구문 트리로 표시되는 소스 코드를 탐색할 수 있는 스캐너가 도입되었습니다. 이는 컴파일러 트리 API를 확장하여 javadoc 주석 내용에 대한 구조화된 액세스를 제공합니다.
  • javax.tools 패키지에는 새 프로세스를 실행하지 않고도 Java 애플리케이션에서 직접 Javadoc 도구를 호출할 수 있는 클래스와 인터페이스가 포함되어 있습니다.
  • 클래스 또는 인터페이스에 대해 생성된 문서의 '메소드 요약' 섹션이 재구성되었습니다. 이 섹션의 방법 설명은 유형별로 그룹화되어 있습니다. 기본적으로 모든 방법이 나열됩니다. 탭을 클릭하면 특정 유형(정적, 인스턴스, 추상, 구체적 또는 더 이상 사용되지 않음(클래스나 인터페이스에 존재하는 경우))의 메서드를 볼 수 있습니다.
  • 이제 javadoc 도구는 javadoc에 의해 생성된 파일에서 잘못된 HTML 또는 접근성 문제와 같은 다양한 문제를 일으킬 수 있는 문제에 대해 javadoc 주석 내용을 검사하는 기능을 지원합니다. 이 기능은 기본적으로 활성화되어 있으며 새로운 -Xdoclint 옵션으로 제어할 수도 있습니다.

Pack200 개선 사항

Java 플랫폼에서 동적 유형 언어를 지원하는 JSR 292로 인해 Java 클래스 파일 형식이 업데이트되었습니다.

Java SE 8 클래스 파일이 효과적으로 압축되도록 Pack200 엔진이 업데이트되었습니다. 이제 JSR 292에서 도입된 상수 풀 항목과 새로운 바이트 코드를 인식할 수 있습니다. 결과적으로 이 버전의 pack200 도구로 생성된 압축 파일은 이전 버전의 unpack200 도구와 호환되지 않습니다.


Java 8 I/O 향상

Java 8에서는 java.nio.charset.Charset 및 확장 문자 집합 구현에 대한 몇 가지 개선 사항이 있습니다. 여기에는 다음이 포함됩니다.

  • 서버의 성능이나 확장성을 향상시킬 수 있는 새로운 SelectorProvider입니다. /dev/poll SelectorProvider는 계속해서 기본값입니다. Solaris 이벤트 포트 메커니즘을 사용하려면 시스템 속성 java.nio.channels.spi.Selector를 sun.nio.ch.EventPortSelectorProvider 값으로 설정하여 실행합니다.
  • /jre/lib/charsets.jar 파일의 크기가 줄어듭니다.
  • java.lang.String(byte[], *) 생성자 및 java.lang.String.getBytes() 메소드의 성능이 향상되었습니다.

Java 8 네트워킹 개선 사항

1) 새로운 클래스 java.net.URLPermission이 추가되었습니다. 주어진 URL에 의해 정의된 리소스에 접근하기 위한 권한을 나타냅니다.

2) 플랫폼별 소켓 옵션과 모든 표준 소켓 유형에서 이러한 옵션을 설정하는 메커니즘이 포함된 jdk.net 패키지가 추가되었습니다. 소켓 옵션은 jdk.net.ExtendedSocketOptions에 정의되어 있습니다.

3) HttpURLConnection 클래스에서 보안 관리자가 설치되고 연결을 열려고 시도하는 메서드가 호출되는 경우 호출자는 대상 URL의 호스트/포트 조합에 대한 'connect'SocketPermission을 소유해야 합니다. 이 요청을 허용하는 URLPermission입니다.

자동 리디렉션이 활성화되어 있고 이 요청이 다른 대상으로 리디렉션되는 경우 호출자는 리디렉션된 호스트/URL에 연결할 수 있는 권한도 있어야 합니다.


Java 8 동시성 향상

java.util.concurrent 패키지에는 두 개의 새로운 인터페이스와 네 개의 새로운 클래스가 추가되었습니다.

Java.util.concurrent 인터페이스

상호 작용 설명
공개 정적 인터페이스 CompletableFuture.AsynchronousCompletionTask 비동기 메소드에 의해 생성된 비동기 작업을 식별하는 데 사용되는 마커 인터페이스입니다. 비동기 활동을 모니터링, 디버깅 및 추적하는 데 유용할 수 있습니다.
공개 인터페이스 CompletionStage 다른 CompletionStage가 완료되면 작업을 수행하거나 값을 계산하는 비동기식 계산 단계를 만듭니다.

Java.util.concurrent 클래스

수업 설명
공용 클래스 CompletableFuture는 객체를 확장하여 Future, CompletionStage를 구현합니다. 명시적으로 완료될 수 있고 CompletionStage로 사용될 수 있는 것은 Future이며, 완료 시 트리거되는 종속 기능 및 작업을 지원합니다.
공개 정적 클래스 ConcurrentHashMap.KeySetView는 객체 구현을 확장하고 직렬화 가능합니다. 이는 공통 값에 매핑하여 선택적으로 추가 기능을 활성화할 수 있는 키 집합인 ConcurrentHashMap의 보기입니다.
공개 추상 클래스 CountedCompleter는 ForkJoinTask를 확장합니다. 트리거되면 완료 작업이 수행되고 보류 중인 작업이 남아 있지 않은 ForkJoinTask입니다.
공용 클래스 CompletionException은 RuntimeException을 확장합니다. 결과나 작업을 완료하는 과정에서 오류나 기타 예외가 발생하면 예외가 발생합니다.

java.util.concurrent.ConcurrentHashMap 클래스의 새로운 메소드

ConcurrentHashMap 클래스는 최신 릴리스에서 몇 가지 새로운 메서드를 도입합니다. 여기에는 다양한 forEach 메소드(forEach, forEachKey, forEachValue 및 forEachEntry), 검색 메소드(search, searchKeys, searchValues ​​및 searchEntries) 및 다수의 축소 메소드(reduce, ReduceToDouble, ReduceToLong 등)가 포함됩니다. 기타 기타 메소드(mappingCount 및 newKeySet)도 추가되었습니다.

java.util.concurrent.atomic의 새로운 클래스

최신 릴리스에는 DoubleAccumulator, DoubleAdder, LongAccumulator 및 LongAdder라는 새로운 클래스의 작은 세트를 통해 확장 가능하고 업데이트 가능한 변수 지원이 도입되었습니다. 내부적으로 원자 변수에 비해 엄청난 처리량 향상을 제공하는 경합 감소 기술을 사용합니다.

수업 설명
공개 클래스 DoubleAccumulator는 Number를 확장하여 직렬화 가능을 구현합니다. 제공된 함수를 사용하여 업데이트된 running double 값을 함께 유지하는 하나 이상의 변수에 사용됩니다.
공개 클래스 DoubleAdder는 Number를 확장하여 직렬화 가능을 구현합니다. 처음에 0의 이중 합을 유지하는 하나 이상의 변수에 사용됩니다.
공개 클래스 LongAccumulator는 Number를 확장하여 직렬화 가능을 구현합니다. 제공된 함수를 사용하여 업데이트된 Running Long 값을 함께 유지하는 하나 이상의 변수에 사용됩니다.
공용 클래스 LongAdder는 Number를 확장하여 직렬화 가능을 구현합니다. 이는 처음에 0의 긴 합계를 함께 유지하는 하나 이상의 변수에 사용됩니다.

java.util.concurrent.ForkJoinPool 클래스의 새로운 메소드

이 클래스에는 공통 풀 또는 공통 풀 인스턴스의 대상 병렬 처리 수준을 각각 반환하는 두 개의 새로운 메서드 getCommonPoolParallelism() 및 commonPool()이 추가되었습니다.

방법 설명
공개 정적 ForkJoinPool commonPool() 공통 풀 인스턴스를 반환합니다.
공개 정적 int getCommonPoolParallelism() 공통 풀의 목표 병렬 처리 수준을 반환합니다.

새로운 클래스 java.util.concurrent.locks.StampedLock

읽기/쓰기 액세스(쓰기, 읽기 및 낙관적 읽기)를 제어하기 위한 세 가지 모드가 있는 기능 기반 잠금을 추가하는 데 사용되는 새로운 클래스 StampedLock이 추가되었습니다. 이 클래스는 세 가지 모드에 걸쳐 조건부로 변환을 제공하는 메서드도 지원합니다.

수업 설명
공용 클래스 StampedLock은 객체를 확장하고 직렬화 가능을 구현합니다. 이 클래스는 읽기/쓰기 액세스를 제어하기 위한 세 가지 모드가 있는 기능 기반 잠금을 나타냅니다.

JAXP(XML 처리용 Java API) 1.6 개선 사항

Java 8에는 XML 처리(JAXP) 1.6을 위한 Java API가 추가되었습니다. 서비스 구성 파일에서 서비스를 로드하려면 java.util.ServiceLoader에 의해 정의된 서비스 공급자 로더 기능을 사용해야 합니다.

이에 대한 이론적 근거는 서비스 제공자가 JAR 파일 이외의 수단으로, 아마도 서비스 구성 파일 없이 배포될 수 있는 Java SE 플랫폼의 향후 모듈화를 허용하는 것입니다.


Java 가상 머신 개선 사항

현재 클래스 또는 해당 상위 클래스의 인스턴스 초기화 메서드만 호출할 수 있도록 Invokespecial 명령어의 검증이 강화되었습니다.


Java Mission Control 5.3은 Java 8에 포함되어 있습니다.

JMC(Java Mission Control)는 효율적이고 상세한 데이터 분석을 가능하게 하고 눈에 띄지 않는 고급 Java 모니터링 및 관리를 제공하는 고급 도구 세트입니다. JMC는 코드 성능, 메모리 및 대기 시간과 같은 일반적인 분석 영역에 대한 섹션을 제공합니다.

일본어 및 중국어 간체의 Babel 언어 팩은 이제 JDK 8에 포함된 Java Mission Control에 기본적으로 포함됩니다.


Java 8 국제화 개선 사항

1) 유니코드 향상

JDK 8에는 유니코드 6.2.0에 대한 지원이 포함되어 있습니다. 여기에는 다음과 같은 기능이 포함되어 있습니다.

  • 터키 리라 기호를 포함한 733개의 새로운 문자.
  • 7개의 새로운 스크립트:
    • 메로이틱 상형문자
    • 메로이틱 필기체
    • 소라 솜펭
    • 차크마
    • 샤라다
    • 타크리
    • 먀오족
  • 11개의 새로운 블록: 위에 나열된 새 스크립트에 대한 7개의 블록과 다음 기존 스크립트에 대한 4개의 블록을 포함합니다.
  • 아랍어 확장-A
  • 순다 보충제
  • Meek 확장 회의
  • 아랍어 수학 알파벳 기호

유니코드 CLDR 데이터 및 java.locale.providers 시스템 속성 채택

유니코드 컨소시엄은 '가용한 로케일 데이터의 가장 크고 광범위한 표준 저장소를 통해 세계 언어를 지원'하기 위해 CLDR(Common Locale Data Repository) 프로젝트를 출시했습니다. CLDR은 로케일 데이터에 대한 사실상의 표준이 되고 있습니다. CLDR의 XML 기반 로케일 데이터는 JDK 8 릴리스에 통합되었지만 기본적으로 비활성화되어 있습니다.

로캘 데이터에는 네 가지 고유한 소스가 있습니다.

  • CLDR은 유니코드 CLDR 프로젝트에서 제공하는 로케일 데이터를 나타냅니다.
  • HOST는 기본 운영 체제 설정에 대한 현재 사용자의 사용자 정의를 나타냅니다. 사용자의 기본 로케일에서만 작동하며 OS에 따라 사용자 정의 가능한 설정이 다를 수 있으나 주로 날짜, 시간, 숫자, 통화 형식을 지원합니다.
  • SPI는 설치된 SPI 공급자에 구현된 로케일 구분 서비스를 나타냅니다.
  • JRE는 이전 JRE 릴리스와 호환되는 로케일 데이터를 나타냅니다.

원하는 로케일 데이터 소스를 선택하려면 java.locale.providers 시스템 특성을 사용하십시오. 데이터 소스를 선호하는 순서로 나열합니다. 예: java.locale.providers=HOST,SPI,CLDR,JRE 기본 동작은 다음 설정과 동일합니다. java.locale.providers=JRE,SPI


Java 8의 새로운 달력 및 로케일 API

JDK 8에는 두 개의 새로운 클래스, 여러 가지 새로운 메서드 및 기존 정적 메서드에 대한 새로운 반환 값이 포함되어 있습니다.

서비스 제공자를 위한 두 개의 새로운 추상 클래스가 java.util.spi 패키지에 추가되었습니다.

수업 설명
공개 추상 클래스 CalendarDataProvider는 LocaleServiceProvider를 확장합니다. 로케일 종속 달력 매개변수를 제공하는 서비스 제공자를 위한 추상 클래스입니다.
공개 추상 클래스 CalendarNameProvider는 LocaleServiceProvider를 확장합니다. 달력 필드 값의 지역화된 문자열 표현(표시 이름)을 제공하는 서비스 공급자를 위한 추상 클래스입니다.

이제 정적 메서드가 번호 지정 시스템에 대해 Locale.UNICODE_LOCALE_EXTENSION을 인식할 수 있습니다.

방법 설명
public static final DecimalFormatSymbols getInstance(로케일 로케일) 지정된 로캘에 대한 DecimalFormatSymbols 인스턴스를 가져오는 데 사용됩니다. 이 메소드는 Java 런타임 자체에서 지원하는 로케일과 설치된 DecimalFormatSymbolsProvider 구현에서 지원하는 로케일의 DecimalFormatSymbols 인스턴스에 대한 액세스를 제공합니다. 로캘이 null이면 NullPointerException이 발생합니다.

캘린더 API에 새로운 메소드를 추가했습니다:

방법 설명
공개 부울 isSupportedLocale(로케일 로케일) 해당 로케일 서비스 제공자가 해당 로케일을 지원하는 경우 true를 반환합니다. 지정된 로케일에는 지원 결정을 위해 고려해야 하는 확장이 포함될 수 있습니다. java.util.spi.LocaleServiceProvider 클래스에 정의되어 있습니다.
공개 문자열 getCalendarType() 이 Calendar의 달력 유형을 반환합니다. 달력 유형은 유니코드 LDML(Locale Data Markup Language) 사양에 의해 정의됩니다. java.util.Calendar 클래스에 정의되어 있습니다.

Calendar.getDisplayName 및 Calendar.getDisplayNames 메소드에 새로운 스타일 지정자가 추가되어 달력 이름의 형식을 결정합니다.


지정자 설명
공개 정적 최종 int SHORT_FORMAT 형식에 사용되는 짧은 이름을 나타내는 getDisplayName 및 getDisplayNames에 대한 스타일 지정자입니다.
공개 정적 최종 int LONG_FORMAT 형식에 사용되는 긴 이름을 나타내는 getDisplayName 및 getDisplayNames의 스타일 지정자입니다.
공개 정적 최종 int SHORT_STANDALONE 달력 헤더로 월 약어와 같이 독립적으로 사용되는 짧은 이름을 나타내는 getDisplayName 및 getDisplayNames에 대한 스타일 지정자입니다.
공개 정적 최종 int LONG_STANDALONE 달력 헤더로 사용되는 월 이름과 같이 독립적으로 사용되는 긴 이름을 나타내는 getDisplayName 및 getDisplayNames에 대한 스타일 지정자입니다.

로케일의 (선택적) 확장을 처리하기 위한 두 가지 새로운 Locale 메소드입니다.

방법 설명
공개 부울 hasExtensions() 이 Locale에 확장자가 있으면 true를 반환합니다.
공개 로캘 스트립확장() 확장자가 없는 이 로케일의 복사본을 반환합니다. 이 Locale에 확장이 없으면 이 Locale 자체가 반환됩니다.

두 개의 새로운 Locale.filter 메소드는 RFC 4647에 정의된 대로 지정된 기준과 일치하는 Locale 인스턴스 목록을 반환합니다.

방법 설명
공개 정적 목록 필터(목록 우선 순위 목록, 컬렉션 로케일) RFC 4647에 정의된 필터링 메커니즘을 사용하여 일치하는 Locale 인스턴스 목록을 반환합니다. 이는 mode가 Locale.FilteringMode.AUTOSELECT_FILTERING인 경우 filter(List, Collection, FilteringMode)와 동일합니다.
공개 정적 목록 필터(목록 우선 순위 목록, 컬렉션 로케일, Locale.FilteringMode 모드) RFC 4647에 정의된 필터링 메커니즘을 사용하여 일치하는 Locale 인스턴스 목록을 반환합니다.

두 개의 새로운 Locale.filterTags 메소드는 RFC 4647에 정의된 대로 지정된 기준과 일치하는 언어 태그 목록을 반환합니다.

방법 설명
공개 정적 목록 필터태그(목록 우선순위목록, 컬렉션 태그) RFC 4647에 정의된 기본 필터링 메커니즘을 사용하여 일치하는 언어 태그 목록을 반환합니다. 이는 모드가 Locale.FilteringMode.AUTOSELECT_FILTERING인 경우 filterTags(List, Collection, FilteringMode)와 동일합니다.
공개 정적 목록 필터태그(목록 우선순위 목록, 컬렉션 태그, Locale.FilteringMode 모드) RFC 4647에 정의된 기본 필터링 메커니즘을 사용하여 일치하는 언어 태그 목록을 반환합니다.

두 가지 새로운 조회 방법은 RFC 4647에 정의된 조회 메커니즘을 사용하여 가장 일치하는 로케일 또는 언어 태그를 반환합니다.

방법 설명
공개 정적 로캘 조회(목록 우선 순위 목록, 컬렉션 로캘) RFC 4647에 정의된 조회 메커니즘을 사용하여 가장 일치하는 언어 태그에 대한 Locale 인스턴스를 반환합니다.
공개 정적 문자열 조회 태그(목록 우선 순위 목록, 컬렉션 태그) RFC 4647에 정의된 조회 메커니즘을 사용하여 가장 일치하는 언어 태그를 반환합니다.

기타 Java 8 버전 개선 사항

JDK 8u5의 향상된 기능

1) 애플리케이션에 대한 보안 프롬프트가 표시되는 빈도가 감소되었습니다.


JDK 8u11의 향상된 기능

1) JRE가 설치되거나 업데이트될 때 스폰서의 제안을 억제하는 옵션은 Java 제어판의 고급 탭에서 사용할 수 있습니다.

2) Entry-Point 속성은 JAR 파일 매니페스트에 포함되어 하나 이상의 클래스를 RIA(Rich Internet Application)의 유효한 진입점으로 식별할 수 있습니다.


JDK 8u20의 향상된 기능

1) javafxpackager 도구의 이름이 javapackager로 변경되었습니다. 이 도구는 자체 포함된 애플리케이션 번들러에 대한 새로운 인수로 향상되었습니다.

다음 개선 사항은 Java 도구와 관련되어 있습니다.

  • RTM(Restricted Transactional Memory)과 관련된 실험적 JIT 컴파일러 옵션이 추가되었습니다.
  • 문자열 중복 제거와 관련된 여러 옵션이 추가되었습니다.
  • AES(Advanced Encryption Standard) 내장 기능과 관련된 여러 옵션이 추가되었습니다.
  • 가비지 수집 옵션의 조합은 더 이상 사용되지 않습니다.

2) Java HotSpot Virtual Machine에 가비지 컬렉션 튜닝 가이드가 추가되었습니다. Java HotSpot VM에 포함된 가비지 수집기에 대해 설명하고 특히 대량의 데이터(수 기가바이트)를 처리하고 스레드가 많으며 트랜잭션 속도가 높은 경우 애플리케이션 성능을 가장 최적화할 수 있는 가비지 수집기를 결정하는 데 도움이 됩니다. .


JDK 8u31의 향상된 기능

1) 이번 릴리스에서는 SSLv3 프로토콜이 Java 제어판 고급 옵션에서 제거되었습니다.


JDK 8u40의 향상된 기능

자바 도구

1) 보증 표준 재정의 메커니즘(JDK-8065675) 및 확장 메커니즘(JDK-8065702)이 더 이상 사용되지 않기 때문에 -XX:+CheckEndorsedAndExtDirs가 추가되었습니다. 이 옵션은 이러한 메커니즘의 기존 사용을 식별하는 데 도움이 되며 JDK 7u80 및 JDK 8u40에서 지원됩니다.

2) JFR(Java Flight Recorder)은 상용 기능을 잠금 해제하고 애플리케이션 런타임 중에 JFR을 활성화하는 다양한 방법을 제공합니다.

여기에는 Java Mission Control 내의 jcmd 진단 명령 및 그래픽 사용자 인터페이스(GUI) 제어와 같은 Java 명령줄 옵션이 포함되어 있습니다. 이러한 유연성을 통해 시작 시 적절한 옵션을 제공하거나 나중에 JFR과 상호 작용할 수 있습니다.

3) -XX:StartFlightRecording=parameter=value 옵션에는 JVM이 제어된 방식으로 종료될 때 JFR 데이터의 덤프 파일을 생성해야 하는지 여부를 지정하는 새로운 매개변수 dumponexit=true가 있습니다.

4) RTM(Restricted Transactional Memory)과 관련된 옵션은 더 이상 실험적이지 않습니다. 이러한 옵션에는 -XX:RTMAbortRatio=abort_ratio, -XX:RTMRetryCount=number_of_retries, -XX:+UseRTMDeopt 및 -XX:+UseRTMLocking이 포함됩니다.

5) Java 8에는 AppCDS(애플리케이션 클래스 데이터 공유)가 도입되었습니다. AppCDS는 CDS(클래스 데이터 공유)를 확장하여 표준 확장 디렉토리의 클래스와 애플리케이션 클래스 경로를 공유 아카이브에 배치할 수 있습니다. 이는 상용 기능이므로 더 이상 실험적인 기능으로 간주되지 않습니다.

6) 새로운 옵션 -XX:+ResourceManagement 및 -XX:ResourceManagementSampleInterval=value가 추가되었습니다.

7) 대형 페이지에 대한 추가 정보가 추가되었습니다. 거대 페이지라고도 알려진 대형 페이지는 표준 메모리 페이지 크기보다 훨씬 큰 메모리 페이지입니다. 대형 페이지는 프로세서 변환 참조 버퍼를 최적화합니다. Linux 옵션 -XX:+UseHugeTLBFS, -XX:+UseSHM 및 -XX:+UseTransparentHugePages가 문서화되었습니다.

8) -XX:ObjectAlignmentInBytes=alignment 옵션이 문서화되었습니다.

SQL의 다른 테이블에서 열을 선택하는 방법

JJS 도구

1) --optimistic-types=[true|false] 옵션이 추가되었습니다. 역최적화 재컴파일을 통해 낙관적 유형 가정을 활성화하거나 비활성화합니다.

2) jjs 도구에 --언어=[es5] 옵션이 추가되었습니다. ECMAScript 언어 버전을 지정합니다.

자바패키저 도구

1) OS X 번들러에 새로운 인수를 사용할 수 있습니다. mac.CFBundleVersion 인수는 사용할 내부 버전 번호를 식별합니다.

2) mac.dmg.simple 인수는 AppleScript 코드 실행에 의존하는 DMG 사용자 정의 단계를 건너뛰는지 여부를 나타냅니다.

Jcmd 도구

Jcmd 도구는 JFR(Java Flight Recorder)과 동적으로 상호 작용하는 데 사용됩니다. 이를 사용하여 상업용 기능을 잠금 해제하고, 비행 기록을 활성화/시작/중지하고, 시스템에서 다양한 상태 메시지를 얻을 수 있습니다.

Jstat 도구

jstat 도구는 메타공간의 특별한 부분인 압축된 클래스 공간에 대한 정보로 업데이트되었습니다.

가상 기기

확장 가능한 기본 메모리 추적 HotSpot VM 기능은 VM 메모리 누수를 진단하고 VM에 메모리 누수가 없을 때 사용자를 명확히 하는 데 도움이 됩니다. Native Memory Tracker는 대규모 시스템에서 자체 종료 없이 실행될 수 있으며 소규모 프로그램에 허용되는 수준 이상으로 심각한 성능 영향을 주지 않고 실행될 수 있습니다.