Tudo sobre Java12 – Novos recursos, segurança e declaração de expressão de switch (exemplos)
Publicados: 2019-04-07 Em 19th March 2019
o Java12 foi lançado. Como sabemos que o Java12
fazia parte do lançamento rápido, ele foi lançado apenas 6 meses após o lançamento do Java11.
Neste tutorial, veremos todas as mudanças e novos recursos sobre o Java12.
Pessoalmente, mudei para Java12 para todo o meu desenvolvimento, mas para o ciclo de produção é muito cedo. Mantenha este tutorial marcado quando quiser mudar para Java12 para todos os seus projetos de produção.
O que há de novo em Java12? Novos recursos em Java12:
Existem alguns recursos internos e relacionados ao fluxo de trabalho do usuário no Java12 que mudaram. Vamos dar uma olhada no que está dentro do Java 12.
Alteração-1) Descarga de classe simultânea
O Garbage Collector normal geralmente descarrega a variável não utilizada durante o ciclo de GC e geralmente notamos alguma interrupção/pausa no processo ou aumento da CPU durante esse período. Normalmente nem percebemos isso.
Com ZGC
(Z Garbage Collector) – Java12 também suporta descarregamento de classe simultâneo. Como isso acontece durante o ciclo normal de GC, não há nenhuma pausa e também não há mais uso extra de memória.
Por padrão, o ZGC está habilitado em Java12. Nenhuma ação necessária
Como desativar o ZGC?
- Basta iniciar seu aplicativo com o argumento de linha de comando JVM
-XX:-ClassUnloading
Change-2) Obtenha mais detalhes sobre o JVM Crash
Quando há um erro OOM (out Of Memory) ou travamentos da JVM, geralmente o Java cria arquivos de despejo com todos os detalhes.
1 |
- XX : HeapDumpPath =/ tmp / crunchify / - XX : + HeapDumpOnOutOfMemoryError |
Com esses parâmetros da JVM, os arquivos de despejo serão criados na pasta /tmp/crunchify/
no erro OOM.
Há mais uma opção adicionada no Java12:
1 |
- XX : + ExtensiveErrorReports |
Um novo arquivo de log será criado com o nome hs_err<pid>.log
com todos os detalhes sobre o travamento da JVM. Isso é muito útil para o seu ambiente de produção se você estiver vendo falhas frequentes e quiser depurar mais.
Por padrão, ele está desabilitado, mas você pode habilitar o relatório de falhas extensivo adicionando o parâmetro de linha de comando JVM acima.
Alteração-3) Formatação de Número Compacto
java.text adiciona suporte para formato de número compacto. 100o
pode ser mencionado como 1K
e 100000
pode ser mencionado como 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 ) ; } } |
Resultado:
1 |
NumberFormat . Style . SHORT Result : 100K |
Alteração-4) Aprimoramentos de segurança Java
alterações security-libs/java.security
:
- não permitir e permitir Opções para java.security.manager
- se
disallow
, então System.setSecurityManager
não pode ser usado para definir o gerenciador de segurança.
- se
- -groupname Opção adicionada à geração de pares de chaves keytool
- um usuário pode especificar um grupo nomeado ao gerar um par de chaves.
- Personalizando a geração
PKCS12 keystore
- inclui algoritmos e parâmetros para
- proteção de chave
- proteção de certificado
- MacDataGenericName
- inclui algoritmos e parâmetros para
- Novos eventos de segurança JFR
- O que é JFR (Java Flight Recorder)
- 4 novos eventos JFR adicionados
- jdk.X509Certificado
- jdk.X509Validation
- jdk.TLSHandshake
- jdk.SecurityPropertyModification
Mudança-5) JEP 325: Trocar Expressões
A Switch statement
agora é suportada em Java12.
-
case L -> syntax
. Aqui não há nenhuma pausa necessária. - Uso da expressão do switch
- esta é uma instrução switch simplificada
- se um rótulo for correspondido, somente a expressão à direita de um rótulo de seta será executada.
- Nenhuma instrução break é necessária.
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 ) ; } } |

Resultado do 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 |
Mudança-6) API de Constantes JVM
java.lang.invoke.constant
: Como você deve saber, a classe Java possui um pool constante que armazena todos os operandos em tempo de execução.
Java12 adiciona API para invocar constantes em tempo de execução.
Recursos removidos do Java12:
Recursos obsoletos do Java12:
Deixe-me saber se você tem algum tutorial útil sobre Java12 que você gostaria de incluir aqui.