Java12に関するすべて–新機能、セキュリティ、およびSwitch式ステートメント(例)
公開: 2019-04-07 19th March 2019
にJava12がリリースされました。 Java12
は急速リリースの一部であったことを知っているので、Java11リリースからわずか6か月でリリースされました。
このチュートリアルでは、Java12に関するすべての変更と新機能について説明します。
個人的には、すべての開発でJava12に切り替えましたが、本番サイクルでは時期尚早です。 すべての本番プロジェクトでJava12に切り替える場合は、このチュートリアルをブックマークしておいてください。
Java12の新機能Java12の新機能:
Java12には、変更された内部およびユーザーワークフロー関連の機能がかなりあります。 Java12の内部を見てみましょう。
変更-1)並行クラスのアンロード
通常のガベージコレクターは通常、GCサイクル中に未使用の変数をアンロードし、通常、処理中に停止/一時停止が発生するか、その間にCPUが増加します。 通常、私たちはそれに気づいていません。
ZGC
(Zガベージコレクター)を使用–Java12はクラスの同時アンロードもサポートします。 これは通常のGCサイクル中に発生するため、一時停止はなく、メモリの余分な使用もありません。
デフォルトでは、ZGCはJava12で有効になっています。 これ以上のアクションは必要ありません
ZGCを無効にする方法は?
- JVMコマンドライン引数
-XX:-ClassUnloading
変更-2)JVMクラッシュの詳細を取得する
OOM(メモリ不足)エラーが発生した場合、またはJVMがクラッシュした場合、通常、Javaはすべての詳細を含むダンプファイルを作成します。
1 |
- XX : HeapDumpPath =/ tmp / crunchify / - XX : + HeapDumpOnOutOfMemoryError |
このJVMパラメータを使用すると、OOMエラー時に/tmp/crunchify/
フォルダの下にダンプファイルが作成されます。
Java12で追加されたもう1つのオプションがあります。
1 |
- XX : + ExtensiveErrorReports |
新しいログファイルがhs_err<pid>.log
という名前で作成され、JVMのクラッシュに関するすべての詳細が示されます。 これは、頻繁にクラッシュが発生し、さらにデバッグしたい場合に、実稼働環境で非常に役立ちます。
デフォルトでは無効になっていますが、上記の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)Javaセキュリティの強化
security-libs/java.security
変更:
- java.security.managerのオプションを禁止および許可する
disallow
場合は、システム。setSecurityManager
を使用してセキュリティマネージャーを設定することはできません。
- -keytoolキーペア生成に追加されたgroupnameオプション
- ユーザーは、キーペアを生成するときに名前付きグループを指定できます。
-
PKCS12 keystore
生成のカスタマイズ- のアルゴリズムとパラメータが含まれています
- キー保護
- 証明書の保護
- MacData
- のアルゴリズムとパラメータが含まれています
- 新しいJFRセキュリティイベント
- JFR(Java Flight Recorder)とは
- 4つの新しいJFRイベントが追加されました
- jdk.X509Certificate
- jdk.X509Validation
- jdk.TLSHandshake
- jdk.SecurityPropertyModification
変更-5)JEP 325:式の切り替え
拡張Switch statement
がJava12でサポートされるようになりました。
- Java12ベース
case L -> syntax
操作。 ここでは休憩は必要ありません。 - スイッチ式の使用
- これは簡略化されたswitchステートメントです
- ラベルが一致した場合、矢印ラベルの右側の式のみが実行されます。
- ブレークステートメントは必要ありません。
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の便利なチュートリアルがあれば教えてください。