Все о Java12 — Заявление о новых функциях, безопасности и выражении переключения (примеры)
Опубликовано: 2019-04-07 19th March 2019
года была выпущена Java12. Как мы знаем, Java12
был частью быстрого выпуска, он был выпущен всего через 6 месяцев после выпуска Java11.
В этом руководстве мы рассмотрим все изменения и новые функции Java12.
Лично я перешел на Java12 для всех своих разработок, но для производственного цикла это слишком рано. Сохраните это руководство в закладках, если захотите переключиться на Java12 для всех своих производственных проектов.
Что нового в Java12? Новые функции в Java12:
В Java12 есть довольно много внутренних и пользовательских функций, связанных с рабочим процессом, которые изменились. Давайте посмотрим, что внутри Java 12.
Изменение-1) Выгрузка параллельного класса
Обычный сборщик мусора обычно выгружает неиспользуемую переменную во время цикла GC, и мы обычно замечаем некоторую остановку/паузу в процессе или увеличение загрузки ЦП в это время. Обычно мы этого даже не замечаем.
С ZGC
(Z Garbage Collector) — Java12 также поддерживает одновременную выгрузку классов. Поскольку это происходит во время обычного цикла сборки мусора, нет ни паузы, ни дополнительного использования памяти.
По умолчанию ZGC включен в Java12. Больше никаких действий не требуется
Как отключить ZGC?
- Просто запустите приложение с аргументом командной строки JVM
-XX:-ClassUnloading
Изменение-2) Получить более подробную информацию о сбое JVM
Когда возникает ошибка OOM (недостаточно памяти) или происходит сбой JVM, обычно Java создает файлы дампа со всеми подробностями.
1 |
- XX : HeapDumpPath =/ tmp / crunchify / - XX : + HeapDumpOnOutOfMemoryError |
С этими параметрами JVM файлы дампа будут создаваться в папке /tmp/crunchify/
при ошибке OOM.
В Java12 добавлена еще одна опция:
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
, то System.setSecurityManager
нельзя использовать для установки менеджера безопасности.
- если
- Параметр -groupname добавлен в генерацию пары ключей keytool
- пользователь может указать именованную группу при создании пары ключей.
- Настройка генерации
PKCS12 keystore
- включает алгоритмы и параметры для
- защита ключей
- защита сертификата
- MacData
- включает алгоритмы и параметры для
- Новые события безопасности JFR
- Что такое JFR (Java Flight Recorder)
- Добавлено 4 новых события JFR
- jdk.X509Сертификат
- jdk.X509Проверка
- jdk.TLSрукопожатие
- jdk.SecurityPropertyModification
Изменение-5) JEP 325: Переключение выражений
Оператор Enhanced Switch statement
теперь поддерживается в Java12.
-
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) API констант JVM
java.lang.invoke.constant
: Как вы, возможно, знаете, класс Java имеет постоянный пул, в котором хранятся все операнды во время выполнения.
Java12 добавляет API для вызова констант во время выполнения.
Удаленные функции из Java12:
Устаревшие функции Java12:
Дайте мне знать, если у вас есть удобный учебник по Java12, который вы хотели бы включить сюда.