A versão mais recente do Java Development Kit, o Java 11, está disponível. Desde que o JDK Beta dez sua estréia em 1995, tem havido um desenvolvimento contínuo da plataforma para essa linguagem de programação de alto nível e propósito geral.
O lançamento do Java 11 seguiu o Java 10 apenas por 6 meses. Isso está de acordo com a proposta feita por Mark Reinhold, arquiteto-chefe da plataforma Java, em 2017. Ele propôs substituir o cronograma de dois anos por um ciclo de lançamento duas vezes ao ano.
No momento, o Java 8 e o Java 11 são as versões LTS (suporte a longo prazo). O final das atualizações públicas para o Java 8 está agendado para janeiro de 2019 para uso comercial. Para uso não comercial, o mesmo está programado para uma data não especificada em dezembro de 2020.
O que é interessante com o Java 11, além de todos os recursos adicionados, removidos e preteridos, é que ele não será suportado pelo Oracle. Em seu lugar, a comunidade OpenJDK fornecerá suporte de longo prazo, provavelmente na forma de AdoptOpenJDK.
E quanto a outras versões Java?
Com o lançamento do Java 11, o suporte para o Java 10 terminou. Isso porque era uma versão de lançamento rápido, como o Java 9, que continha suporte que também foi removido.
Embora as versões do JDK anteriores ao Java 8 ainda sejam suportadas pelas organizações em uma base comercial, é altamente recomendável desinstalar o pré-Java 8, especialmente de computadores com Windows. Antes de responder à pergunta: “quando o Java 11 substituirá o Java 8 como a versão padrão do Java?”, Vamos primeiro conhecer melhor o Java 11.
Novo no Java 11
Cada versão do Java introduz vários novos recursos. No entanto, desta vez, é maior e melhor. O Java 11 adiciona uma infinidade de novos recursos à lista de recursos existente. Aqui estão alguns dos mais importantes:
Aditivos
- 10 novos scripts, incluindo Adlam, Newa, Tangut e Zanabazar Squar
- Um coletor de lixo escalável e de baixa latência, ZGC ou Z Garbage Collector, é adicionado junto com o Epsilon GC, um Coletor de Lixo No-op experimental
- Acessível por meio da JVMTI, um perfil de heap de baixa sobrecarga agora está disponível
- Adição de um novo método padrão toArray (IntFunction) à interface java.util.Collection
- As cifras ChaCha20 e ChaCha20-Poly1305 estão disponíveis. ChaCha20 é uma nova cifra de fluxo destinada a substituir a antiga e insegura cifra de fluxo RC4
- Combina Unicode 9.0.0 e 10.0.0
- Provedor SunEC aprimorado, suportando 4 curvas adicionais de Brainpool
- Implementação de um novo esquema de acordo chave usando Curve25519 e Curve448
- Lançador Java aprimorado para executar um programa fornecido como um único arquivo de código-fonte Java
- Inclui a implementação do TLS 1.3
- Introdução de jceks.key.serialFilter, uma propriedade de segurança
- A JVM agora suporta a organização de classes e interfaces em um ninho, um novo contexto de controle de acesso
- Novo sinalizador de linha de comando, -XX: + UseDynamicNumberOfCompilerThreads. É adicionado para controlar dinamicamente os threads do compilador
- O suporte ao algoritmo de assinatura RSASSA-PSS é adicionado ao provedor SunMSCAPI
- Cliente HTTP Padronizado
- Suporte para os tipos de criptografia Kerberos 5 de aes128-cts-hmac-sha256-128 e aes256-cts-hmac-sha384-192
- Dados de localidade atualizados com base no CLDR (Common Locale Data Registry) do Unicode Consortium
- var, um nome de tipo reservado, é utilizável ao declarar os parâmetros formais de uma expressão lambda
Remoções
Não apenas a mais recente iteração do Java Development Kit introduziu uma infinidade de recursos, mas também eliminou alguns de seus recursos mais antigos. A maioria deles foi preterida em versões anteriores do Java. Recursos e opções que não estão mais disponíveis no JDK 11 incluem:
- O appletviewer ferramenta. Foi depreciado em JDK 9
- Fontes agrupadas. Portanto, o JDK 11 depende exclusivamente de fontes instaladas no sistema operacional
- classe com.sun.awt.AWTUtilities , que recebeu depreciação no JDK 10
- Módulos CORBA e Java EE
- Módulos JavaFX, agora disponíveis como um conjunto separado de módulos
- Tecnologias Java Plugin e Java WebStart. O Painel de Controle Java, para configurar as tecnologias de implantação, é removido junto com o sistema compartilhado JRE e o mecanismo de Atualização Automática do JRE
- módulo jdk.snmp
- JMC (Java Mission Control). No entanto, ele está disponível como um módulo para download separado
- Especificação para monitoramento e gerenciamento de JVM por meio do SNMP, JVM-MANAGEMENT-MIB.mib
- classe sun.misc.Unsafe.defineClass. Seu substituto é java.lang.invoke.MethodHandles.Lookup.defineClass
- Propriedades sun.nio.ch.disableSystemWideOverlappingFileLockCheck e sun.locale.formatasdefault
- Suporte para imagens com alfa não está mais disponível para o plugin javax.imageio JPEG
- Métodos Thread.destroy() e Thread.stop(Throwable)
Depreciações
Com o lançamento de todas as principais versões da plataforma Java, existem algumas depreciações juntamente com inclusões e exclusões. O JDK 11 desaprova:
- Argumentos da linha de comandos -XX:+UnlockCommercialFeatures e -XX:+LogCommercialFeatures
- Comandos jcmd: VM.check_commercial_features e VM.unlock_commercial_features
- Mecanismo JavaScript Nashorn, APIs correspondentes e ferramenta jjs
- API Pack200 nas ferramentas java.util.jar e pack200 e unpack200
- Métodos GSSContext baseados em fluxo, incluindo acceptSecContext, getMIC, initSecContext, unwrap, verifyMIC e wrap
- ThreadPoolExecutor , o método finalize que encerra o pool de threads não faz nada
- Opção de VM –XX: + AggressiveOpts
Verifique isso para obter detalhes detalhados sobre adições, remoções e depreciações feitas no JDK 11.
Então, quando o Java 11 substituirá o Java 8 como o Java padrão?
A resposta mais simples é: não tão cedo! Já discutimos que algumas organizações e indivíduos também dependem de versões pré-Java 8 para continuar suas operações. Isso também será válido para o Java 8. Além disso, é uma versão LTS que significa que irá durar mais que as versões de lançamento rápido.
Outro argumento que sustenta essa ideia é que o Java 11 é relativamente novo. Portanto, levará algum tempo para ganhar tração. A maioria das empresas que já estão crescendo rapidamente com a implantação do Java 8 continuará obtendo benefícios disso.
Não consegue decidir qual implementação usar para o Java 11? OpenJDK ou Oracle JDK. Bem, aqui está um contraste entre os dois para ajudá-lo a fazer suas seleções.
OpenJDK vs. Oracle JDK
As tentativas de tornar os binários do OpenJDK e do Oracle JDK o mais similar possível estão em ação. No entanto, ainda existem várias diferenças entre os dois no 11º lançamento principal do Java. Alguns dos mais importantes são:
- APIs, como javafx e gerenciamento de recursos, não estão incluídas nos binários do OpenJDK, mas nos binários do Oracle JDK
- O OpenJDK permite o uso de provedores de criptografia de terceiros não assinados, enquanto o Oracle JDK requer que esses provedores sejam assinados com um certificado fornecido pela Oracle.
- O OpenJDK vem apenas com o Java Development Kit, enquanto o Oracle JDK oferece adicionalmente o Java Runtime Environment
- O OpenJDK está disponível como um arquivo compactado (tar.gz ou .zip). Pelo contrário, o Oracle JDK está disponível como instaladores (deb, msi, deb, etc.)
- O OpenJDK está disponível sob a licença GPLv2wCP enquanto o Oracle JDK é liberado sob a licença OTN
- A saída para java -version é diferente no OpenJDK do que no Oracle JDK
- O conteúdo de \ legal \ java.desktop \ freetype.md é diferente para o OpenJDK e o Oracle JDK
- O log de uso é exclusivo do Oracle JDK
- Usando o sinalizador –XX: + UnlockCommercialFeatures, o OpenJDK lançará um erro e parará. Pelo contrário, usar o mesmo no Oracle JDK imprimirá um aviso, mas a execução continuará
- Enquanto o OpenJDK oferece o Alpine Linux , o Oracle JDK oferece o Solaris
Espero que isso ajude você a fazer suas seleções JDK!