Java12에 대한 모든 것 – 새로운 기능, 보안 및 스위치 표현식 설명(예시)
게시 됨: 2019-04-07 19th March 2019
Java12가 릴리스되었습니다. 우리가 알고 있는 바와 같이 Java12
는 빠른 릴리스의 일부였으며 Java11 릴리스 후 6개월 만에 릴리스되었습니다.
이 튜토리얼에서는 Java12에 대한 모든 변경 사항과 새로운 기능을 살펴봅니다.
개인적으로 저는 모든 개발을 위해 Java12로 전환했지만 프로덕션 주기에는 너무 이릅니다. 모든 프로덕션 프로젝트에 대해 Java12로 전환하려는 경우 이 튜토리얼을 책갈피로 유지하십시오.
Java12의 새로운 기능은 무엇입니까? Java12의 새로운 기능:
Java12에는 변경된 내부 및 사용자 워크플로 관련 기능이 꽤 있습니다. Java 12 내부에 무엇이 있는지 살펴보겠습니다.
변경-1) 동시 클래스 언로딩
일반 가비지 컬렉터는 일반적으로 GC 주기 동안 사용하지 않는 변수를 언로드하며 일반적으로 프로세스 중 일부 중지/일시 중지 또는 그 시간 동안 CPU 증가를 확인합니다. 보통 우리는 그것을 알아차리지도 못합니다.
ZGC
(Z Garbage Collector) 사용 - Java12는 동시 클래스 언로드도 지원합니다. 이것은 정상적인 GC 주기 동안 발생하므로 일시 중지도 없고 메모리 추가 사용량도 없습니다.
기본적으로 ZGC는 Java12에서 활성화됩니다. 더 이상 조치가 필요하지 않습니다.
ZGC를 비활성화하는 방법은 무엇입니까?
- JVM 명령줄 인수
-XX:-ClassUnloading
으로 애플리케이션을 시작하기만 하면 됩니다.
변경-2) JVM Crash에 대해 자세히 알아보기
OOM(메모리 부족) 오류가 발생하거나 JVM이 충돌하는 경우 일반적으로 Java는 모든 세부 정보가 포함된 덤프 파일을 생성합니다.
1 |
- XX : HeapDumpPath =/ tmp / crunchify / - XX : + HeapDumpOnOutOfMemoryError |
이 JVM 매개변수를 사용하면 OOM 오류 /tmp/crunchify/
폴더 아래에 덤프 파일이 생성됩니다.
Java12에는 다음과 같은 옵션이 하나 더 추가되었습니다.
1 |
- XX : + ExtensiveErrorReports |
JVM 충돌에 대한 모든 세부 정보가 포함된 hs_err<pid>.log
라는 새 로그 파일이 생성됩니다. 이것은 자주 충돌을 보고 더 많은 디버그를 하려는 경우 프로덕션 환경에 매우 유용합니다.
기본적으로 비활성화되어 있지만 위의 JVM 명령줄 매개변수를 추가하여 광범위한 충돌 보고서를 활성화할 수 있습니다.
변경-3) 간결한 숫자 서식
java.text는 컴팩트 숫자 형식에 대한 지원을 추가합니다. 100o
는 1K
로 언급될 수 있고 100000
은 100K
로 언급될 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
package crunchify . com . tutorials ; import java . text . NumberFormat ; import java . util . Locale ; /** * @author Crunchify.com * Java12 Compact Number format example * */ public class CrunchifyJava12CompactNumber { public static void main ( String args [ ] ) { // NumberFormat is the abstract base class for all number formats. // This class provides the interface for formatting and parsing numbers. NumberFormat also provides methods for determining which locales have number formats, and what their names are. NumberFormat crunchifyFormat = NumberFormat . getCompactNumberInstance ( Locale . US , NumberFormat . Style . SHORT ) ; // getCompactNumberInstance returns a compact number format for the specified locale and formatStyle. String crunchifyResult = crunchifyFormat . format ( 100000 ) ; System . out . println ( "NumberFormat.Style.SHORT Result: " + crunchifyResult ) ; } } |
결과:
1 |
NumberFormat . Style . SHORT Result : 100K |
변경-4) 자바 보안 강화
security-libs/java.security
변경 사항:
- java.security.manager에 대한 옵션을 허용하지 않고 허용합니다.
-
disallow
않으면 시스템.setSecurityManager
는 보안 관리자를 설정하는 데 사용할 수 없습니다.
-
- -groupname 옵션이 keytool 키 쌍 생성에 추가됨
- 사용자는 키 쌍을 생성할 때 명명된 그룹을 지정할 수 있습니다.
-
PKCS12 keystore
생성 사용자 정의- 알고리즘 및 매개변수 포함
- 키 보호
- 인증서 보호
- 맥데이터
- 알고리즘 및 매개변수 포함
- 새로운 JFR 보안 이벤트
- JFR(자바 비행 기록 장치)이란?
- 4개의 새로운 JFR 이벤트가 추가되었습니다.
- jdk.X509인증서
- jdk.X509검증
- jdk.TLS핸드셰이크
- jdk.SecurityPropertyModification
변경-5) JEP 325: 표현식 전환
향상된 Switch statement
은 이제 Java12에서 지원됩니다.
- Java 12 기반
case L -> syntax
연산. 여기에는 휴식이 필요하지 않습니다. - 스위치 표현의 사용
- 이것은 단순화된 switch 문입니다.
- 레이블이 일치하면 화살표 레이블 오른쪽에 있는 표현식만 실행됩니다.
- break 문이 필요하지 않습니다.
CrunchifyJava12SwitchExample.java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
package crunchify . com . tutorials ; import java . util . Scanner ; /** * @author Crunchify.com * What's new in Java12 Switch statement? * */ public class CrunchifyJava12SwitchExample { public static void main ( String [ ] args ) { Scanner crunchifyObj = new Scanner ( System . in ) ; log ( "Enter company name from: Google, Facebook, PayPal, eBay, Twitter, LinkedIn, Apple" ) ; String company = crunchifyObj . nextLine ( ) ; log ( "Selected Company: " + company ) ; // Pre-Java12 Switch statement switch ( company ) { case "Google" : case "Facebook" : case "PayPal" : case "eBay" : case "Twitter" : log ( "Pre-Java12: This switch is for companies Google, Facebook, PayPal, eBay & Twitter" ) ; break ; case "" : case "Apple" : case "LinkedIn" : log ( "Pre-Java12: This switch is for companies Apple & LinkedIn" ) ; break ; default : log ( "Pre-Java12: Oops... Invalid company" ) ; } /** * Java 12 based case L -> syntax operation. * Here there isn't any break necessary. */ switch ( company ) { case "Google" , "Facebook" , "PayPal" , "eBay" , "Twitter" - > log ( "Java12: This switch is for companies Google, Facebook, PayPal, eBay & Twitter" ) ; case "Apple" , "LinkedIn" - > log ( "Java12: This switch is for companies Apple & LinkedIn" ) ; default - > { log ( "Java12: Oops... Invalid company" ) ; } } /** * This is switch expression */ final String companyName ; companyName = switch ( company ) { case "Google" , "Facebook" , "PayPal" , "eBay" , "Twitter" - > ( "Java12 Expression: This switch is for companies Google, Facebook, PayPal, eBay & Twitter" ) ; case "Apple" , "LinkedIn" - > ( "Java12 Expression: This switch is for companies Apple & LinkedIn" ) ; /** * it's also possible to do switch operation without a block and break */ default - > { break "Java12 Expression: Oops... Invalid company" ; } } ; log ( companyName ) ; } public static void log ( String result ) { System . out . println ( result ) ; } } |

IntelliJ IDEA 결과:
1 2 3 4 5 6 7 8 |
Enter company name from : Google , Facebook , PayPal , eBay , Twitter , LinkedIn , Apple Twitter Selected Company : Twitter Pre - Java12 : This switch is for companies Google , Facebook , PayPal , eBay & Twitter Java12 : This switch is for companies Google , Facebook , PayPal , eBay & Twitter Java12 Expression : This switch is for companies Google , Facebook , PayPal , eBay & Twitter |
변경-6) JVM 상수 API
java.lang.invoke.constant
: 아시다시피 Java 클래스에는 런타임에 모든 피연산자를 저장하는 상수 풀이 있습니다.
Java12는 런타임에 상수를 호출하기 위한 API를 추가합니다.
Java12에서 제거된 기능:
Java12에서 더 이상 사용되지 않는 기능:
여기에 포함하고 싶은 Java12에 대한 편리한 자습서가 있으면 알려주십시오.