Mudanças no Java. JDK 9, Java EE 8, OpenJDK e Spring
Olá, começamos 2018 com muitas novidades lançadas ainda em 2017. JDK 9, JavaEE 8, sendo este transferido para a eclipse foundation com o nome de EE4J. Spring 5 e muitas outras novidades.
Então em seus próximos projetos, é bom levar em consideração todos estes fatores.
Falando especificamente em JDK, faremos uma analise de quanto ainda vale se utilizar do JDK da Oracle ou partir para o uso do OpenJDK. Se você acompanha, nos últimos anos a Oracle vem se "esforçando" para deixar o Java mais open source e focando na parte comercial. Dentre alguns exemplos, podemos citar: Netbeans sendo doado para o Apache, certificações Java que exigem cursos oficiais da Oracle, desenvolvimento de ferramentas e suporte estendido ao JDK (JDK 8 da Oracle não terá mais updates públicos a partir de janeiro de 2019). Ferramentas de monitoramento tais como o Mission Control e Flight Recorder, são de uso comercial.
Se você utiliza o JDK da Oracle desde a versão 6, provavelmente não será uma tarefa muito simples utilizar o OpenJDK devido alguns pacotes proprietários. O OpenJDK foi liberado oficialmente na versão 7 do Java, tendo como base inicial a versão 6 e 7. Embora o OpenJDK 6 tenha ficado em um projeto separado.
A Sun iniciou este processo em 2016 e a primeira versão do OpenJDK foi liberada em maio de 2007 (JDK 7)
Implementações do OpenJDK
Como o OpenJDK é a implementação referência e de código aberto, qualquer pessoa pode utilizar os códigos para criar sua própria JVM. Algumas implementações conhecidas:Diferenças entre OpenJDK e Oracle JDK
Diferente do Oracle JDK, o OpenJDK não possui um instalador do tipo wizard para facilitar a instalação no Windows por exemplo. Basicamente você vai descompactar o OpenJDK em uma pasta e colocar o diretório bin no path. Geralmente fazemos isso através da variável de ambiente JAVA_HOME.
Download Oracle JDK
http://www.oracle.com/technetwork/java/javase/downloads/
Download OpenJDK
http://jdk.java.net/9/
Após a instalação de ambos, podemos comparar as duas versões:
Digite o comando abaixo no console:
java -version
java version "9.0.4"
Java(TM) SE Runtime Environment (build 9.0.4+11)
Java HotSpot(TM) 64-Bit Server VM (build 9.0.4+11, mixed mode)
openjdk version "9.0.4"
OpenJDK Runtime Environment (build 9.0.4+11)
OpenJDK 64-Bit Server VM (build 9.0.4+11, mixed mode)
Até ai tudo bem, ambos JDKs estão na mesma versão e build.
Compatibilidade com JavaFX
Se você tem uma aplicação JavaFX, pode ter problemas em rodar ela com o OpenJDK e precisará instalar um pacote complementar chamado OpenJFX
Diferenças na API
Aqui um ponto importante a se considerar. A API do Java possui diferenças em suas bibliotecas. Alguns pacotes adicionais que não existem no OpenJDK que você pode estar usando com o JDK Oracle.
Pacotes somente do JDK Oracle |
jdk.packager.services |
jdk.packager |
javafx.web |
javafx.swing |
javafx.media |
javafx.graphics |
javafx.fxml |
javafx.controls |
javafx.base |
Se engana quem acha que não vai encontrar pacotes com o nomes "com.sun" ou "sun.*". Pois bem, estão todos la. Não se preocupe em varrer o seu código em busca de imports destes pacotes, pois continuarão funcionando com o OpenJDK.
Diferenças nos binários
Existem três grandes diferenças entre os binários OpenJDK e binários Oracle a partir do OpenJDK 8 (Java 8).
- Fonte rasteriser (Freetype vs. T2K)
- Gerenciamento de cores (o OpenJDK usa o LCMS e o Oracle usa o Kodak CMM)
- Renderizador gráfico (pisces vs. ductus)
- Fonte rasteriser (Freetype vs. T2K)
- Gerenciamento de cores (o OpenJDK usa o LCMS e o Oracle usa o Kodak CMM)
Parâmetros da JVM
Os parâmetros são quase iguais para as duas VM's. Para ver a lista completa, use:
java -XX:+UnlockDiagnosticVMOptions -XX:+UnlockCommercialFeatures -XX:+PrintFlagsFinal
A partir do JDK 8u131, a única diferença está nas seguintes flags (ausentes no OpenJDK): bool EnableResourceManagementTLABCache = true {product}
bool EnableSharedLookupCache = true {product}
bool FlightRecorder = false {commercial}
ccstr FlightRecorderOptions = {product}
bool LogCommercialFeatures = false {product}
ccstr MemoryRestriction = none {commercial}
bool ResourceManagement = false {commercial}
intx ResourceManagementSampleInterval = -1 {commercial}
ccstr StartFlightRecording = {commercial}
bool TraceSharedLookupCache = false {product}
bool UnlockCommercialFeatures = true {commercial}
bool UseAppCDS = false {commercial}
Outras distribuições do OpenJDKhttps://www.azul.com/downloads/zulu/zulu-windows/
https://developers.redhat.com/products/openjdk/download/
https://github.com/JetBrains/jdk8u
Conclusão
Cada vez mais o OpenJDK vem ganhando força, deixando as distribuições comerciais com o principal propósito de dar suporte a versões que não receberão mais patchs de segurança públicas.
Para entender a respeito do novo modelo de release do Java, acesse o link abaixo:
Comentários
Postar um comentário