Mostrando postagens com marcador Tecnologia. Mostrar todas as postagens
Mostrando postagens com marcador Tecnologia. Mostrar todas as postagens

segunda-feira, 5 de janeiro de 2026

🚀 Java 21: Guia Completo das Novidades e Como Migrar

Introdução: O Java 21 Chegou como um LTS Revolucionário

Lançada em setembro de 2023, a versão Java 21 não é apenas mais uma atualização. Ela marca um Long-Term Support (LTS), o que significa que é uma versão de suporte estendido, recomendada para produção por anos. A Oracle consolidou nela um conjunto de features preview que estavam em desenvolvimento, trazendo algumas das mudanças mais significativas e aguardadas pela comunidade desde o projeto Loom.


🌟 As Principais Inovações do Java 21

A versão 21 apresenta 15 JEPs (JDK Enhancement Proposals). Vamos mergulhar nas mais impactantes para o dia a dia do desenvolvedor.

🧵 Virtual Threads: Revolução na Concorrência

Finalmente saíram do modo preview! As Virtual Threads (projeto Loom) representam um novo modelo de concorrência leve. Diferente das platform threads (threads do sistema operacional), são threads gerenciadas pela JVM, extremamente leves e em grande número. Isso permite escrever código concorrente no estilo thread-per-request de forma eficiente, sem o overhead tradicional. Ideal para aplicações de alto throughput, como APIs e serviços web.

try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
    executor.submit(() -> {
        System.out.println("Hello from a virtual thread!");
    });
}

🎭 Pattern Matching para Switch (Finalizado)

O Pattern Matching para switch foi finalizado, permitindo uma sintaxe muito mais limpa e expressiva. Agora é possível fazer a desestruturação de objetos diretamente na cláusula case.

String formatter(Object obj) {
    return switch (obj) {
        case Integer i -> String.format("int %d", i);
        case String s -> String.format("String %s", s);
        case null -> "Oops, null!"; // Guarda contra NullPointerException
        default -> obj.toString();
    };
}

📚 Sequenced Collections: Nova Interface para Ordem

Uma nova família de interfaces (SequencedCollection, SequencedSet, SequencedMap) foi introduzida para fornecer operações consistentes em coleções ordenadas. Métodos como getFirst(), getLast(), addFirst(), e reversed() agora têm um contrato claro.

SequencedCollection list = new ArrayList<>();
list.add("B");
list.addFirst("A"); // Adiciona no início
list.getLast(); // Retorna "B"

🛠️ Como Começar a Usar o Java 21

Migrar para o Java 21 é um processo geralmente simples, especialmente se você já está em uma versão LTS anterior (11 ou 17).

1. Baixar o JDK 21

Faça o download do JDK 21 diretamente do site da Oracle, da Adoptium (Eclipse Temurin) ou use gerenciadores como SDKMAN! (sdk install java 21-tem).

2. Atualizar seu Build Tool

No Maven ou Gradle, atualize a configuração do compilador para a versão 21 (<release>21</release> ou sourceCompatibility = JavaVersion.VERSION_21).

3. Testar as Novas Features

Comece implementando Virtual Threads em pontos de I/O da sua aplicação ou refatorando switches complexos com o novo Pattern Matching. A migração costuma ser incremental e não requer mudanças drásticas.


🔍 Benefícios de Longo Prazo e Conclusão

Adotar o Java 21 LTS vai além de usar features novas. É um investimento em performance (com as Virtual Threads), segurança (com atualizações de segurança garantidas) e legibilidade do código. A JVM continua evoluindo com melhorias de garbage collector (ZGC e Shenandoah) e desempenho.

O Java 21 solidifica a linguagem como uma plataforma moderna, ágil e preparada para os desafios de arquiteturas concorrentes e distribuídas da atualidade. A migração é altamente recomendada e representa o futuro do ecossistema Java.

E aí, preparado para atualizar seu projeto? 🚀

quarta-feira, 8 de setembro de 2021

🔄 Atualização e Perguntas Frequentes sobre o Ritmo de Lançamento do Java SE

🔄 Atualização e Perguntas Frequentes sobre o Ritmo de Lançamento do Java SE

No início de 2017, conforme o trabalho no Java SE 9 se aproximava do fim, alguns colaboradores da Comunidade OpenJDK começaram a se perguntar se haveria uma maneira de evoluir a Plataforma Java SE e o JDK em um ritmo mais acelerado, para que novos recursos pudessem ser entregues de maneira mais oportuna. Um grupo de trabalho do JCP foi estabelecido para considerar como o Java Community Process poderia acomodar tal mudança. Após mais discussões entre os principais colaboradores, um plano foi proposto e, em paralelo, foram anunciados planos para seus produtos comerciais Java SE.


Nos poucos meses desde então, a Comunidade OpenJDK, com a liderança da Oracle, entregou o Java SE 9, o Java SE 10, versões de Acesso Antecipado do Java SE 11, bem como múltiplas atualizações de segurança programadas e coordenadas. O OpenJDK Vulnerability Group foi formado. Um novo e pequeno recurso de linguagem foi adicionado no Java SE 10, o que mostra que o novo ritmo funciona não apenas para a implementação, mas também para o trabalho de especificação no JCP.


Dito isto, o novo ritmo introduz novos idiomas e semântica a termos e processos aos quais estamos acostumados há muitos anos. Claramente, os benefícios de um cronograma de lançamento previsível de novos recursos facilmente assimiláveis valem o esforço para alguns dos maiores projetos do ecossistema. Essa tendência também foi observada em outras partes do Ecossistema Java SE. Por exemplo, o Eclipse há muito tem um "trem de lançamento" anual, e o Wildfly está migrando para um modelo de lançamento trimestral.


❓ Pergunta 1: Certamente não se espera que todos adotem releases principais a cada seis meses?!

Não existem mais "releases principais" propriamente ditos; esse agora é um termo legado. Em vez disso, há um fluxo constante de "releases de recursos". Isso é consistente com a forma como muitos lançamentos foram feitos no passado, exceto com uma nova abordagem sobre o versionamento. Por exemplo, o Java 8 foi lançado em março de 2014. O 8u20, um release de recurso, foi lançado quase seis meses depois, em agosto. O 8u40, o próximo release de recurso, foi lançado quase seis meses depois disso.

Então sim, espera-se a adoção de "releases de recursos" a cada seis meses, assim como antes.

Passar do Java 9 para o 10 e para o 11 é mais parecido com passar de 8 para 8u20 e para 8u40 do que de 7 para 8 e para 9. É assustador ver isso a princípio quando se está acostumado a releases principais a cada três anos e se tem um modelo mental do grande impacto dessas grandes mudanças. O ritmo de seis meses não é isso. Mais adiante no FAQ, será fornecida uma prova mais específica disso.


❓ Pergunta 2: Se os novos lançamentos são basicamente o antigo ritmo de seis meses, por que atualizar o número da release principal cada vez? Por que não chamá-lo simplesmente de 9u20, 9u40, etc.?

Por ter simplificado alguns processos do JCP, agora é possível introduzir novos recursos de biblioteca de classes, JVM e linguagem, como a Inferência de Tipo de Variável Local, em apenas seis meses, em vez de ter que esperar anos por uma "release principal". Em vez de lançar dezenas de grandes mudanças nas especificações a cada dois anos, elas podem ser introduzidas de forma mais pragmática em um fluxo constante assim que estiverem prontas para adoção.


❓ Pergunta 3: Mudanças na especificação parecem perigosas e vão inibir o ecossistema de ferramentas de se atualizar, certo?

Embora algumas ferramentas tenham tido dificuldade para migrar de 8 para 9, foi fantástico ver aqueles que fizeram essa transição serem capazes de ir de 9 para 10 quase que da noite para o dia.

Quando o Java 10 foi lançado, todas as principais IDEs tinham suporte ao Java 10, incluindo o novo recurso de inferência de tipo de variável local em questão de dias. Projetos populares como Gradle e Lucene adicionaram rapidamente suporte oficial. Algumas distribuições populares do Linux, como Ubuntu e SUSE Linux Enterprise Server, ajustaram-se proativamente para tornar as últimas releases do OpenJDK o JRE/JDK padrão em suas plataformas. O Elasticsearch planeja ser compatível com releases LTS e não LTS o mais rápido possível para se beneficiar dos novos recursos. Estes são apenas alguns exemplos de outros projetos e produtos mantendo-se no ritmo de seis meses.

O novo ritmo torna mais gerenciável e previsível para os fornecedores de ferramentas, que agora terão um fluxo constante de atualizações menores. Além disso, desenvolvedores com visão de futuro podem explorar novos recursos em desenvolvimento, como tipos de valor mínimo do OpenJDK Project Valhalla ou o Z Garbage Collector do OpenJDK Project ZGC, usando versões de acesso antecipado disponíveis sob uma licença de código aberto familiar.


❓ Pergunta 4: Por que alguém atualizaria para a versão X quando uma nova release X+1 está a apenas seis meses de distância?

Os builds mais recentes do Oracle JDK e os builds do OpenJDK da Oracle são baixados milhões de vezes por mês por desenvolvedores. Foi observado um crescimento consistente nos downloads do JDK com cada release de recurso, incluindo o 9 e o 10. As releases mais recentes do Java 10 estão sendo baixadas a uma taxa muito maior do que as do Java 7 e Java 8 eram. Por exemplo, os downloads do JDK 10, no momento desta escrita, excedem os das atualizações do JDK 8 por um fator de cinco.

A forte adoção do novo ritmo de lançamento é impressionante. É muito encorajador ver IDEs populares e outros fornecedores de ferramentas adotarem e disponibilizarem suporte ao Java 10 rapidamente.


❓ Pergunta 5: Ainda não estou convencido. O Java 9 foi um desafio para adotar, então isso significa que o 10 e o 11 também serão.

Muitos desenvolvedores e usuários de Java SE historicamente esperaram por algumas atualizações antes de adotar uma nova "versão principal". Isso era esperado quando havia dezenas de novos recursos principais que alteravam a especificação em uma release "principal", mas não será o caso daqui para frente com os lançamentos de seis meses. Este não tem sido o caso desde o Java SE 9.

Por exemplo, a release do Java SE 9 incorporou aproximadamente 19.000 mudanças no código-fonte em relação ao Java SE 8. Houve apenas 2.700 dessas mudanças entre o Java 9 e o Java 10 – aproximadamente a mesma quantidade entre o Java 8 e o Java 8u40. Então, enquanto o Java SE 9 foi uma atualização "principal" comparado ao Java SE 8, já vimos que o Java SE 10 é uma simples atualização de recurso para o Java SE 9.


❓ Pergunta 6: Como posso ter confiança de que a transição para a release X+1 será tranquila? Quanto tempo há para a transição?

Os Builds de Acesso Antecipado (EA) estão ainda mais fáceis do que antes para baixar e testar, incluindo os próprios builds do OpenJDK da Oracle. A recomendação é que os desenvolvedores usem os builds de EA do OpenJDK da Oracle em seus sistemas de teste de construção para que quaisquer problemas possam ser detectados antecipadamente.

Há três meses entre a atualização final de uma release de recurso e a atualização de segurança da próxima release de recurso. A recomendação é fazer a transição durante esse período. Há aproximadamente um mês entre uma nova release de recurso e a próxima atualização de segurança programada. Por exemplo, o Java 9.0.4 foi lançado em janeiro de 2018, o Java 10.0.0 em março de 2018 e o 10.0.1 em abril de 2018. Após o lançamento do Java 10.0.1, não é recomendável usar o Java 9.0.4 ou o Java 10.0.0. No entanto, não é necessário esperar um mês, ou mesmo três meses, para começar a testar – os builds de Acesso Antecipado do JDK 10 foram publicados regularmente a partir de novembro de 2017, mais de seis meses antes da release de atualização 10.0.1.

Isso é consistente com os lançamentos históricos de recursos, onde houve 4-6 semanas entre os lançamentos de recursos e uma atualização de segurança subsequente. Por exemplo, o 8u40 foi lançado no início de março de 2015 e a subsequente atualização de segurança programada 8u45 foi lançada em 14 de abril de 2015.


❓ Pergunta 7: Ok, mas não quero novos recursos. Tenho um sistema em produção e só quero atualizações de estabilidade, desempenho e segurança. O que devo fazer?

A intenção é designar releases a cada três anos como releases de "Suporte de Longo Prazo" (LTS), começando com o Java SE 11 em setembro de 2018. Então, enquanto o Java SE 9 atingiu seu Fim de Vida com o lançamento do Java 10, e o Java 10 fará o mesmo com o lançamento do Java 11, o Java 11 terá suporte comercial da Oracle disponível por pelo menos oito anos adicionais.

Como aconteceu por quase uma década com o Java 6 e Java 7 (e provavelmente com o Java 8 em 2019), uma vez que a Oracle parar de contribuir com nossas alterações de código-fonte para uma série de releases específica no OpenJDK, para que possa focar nas necessidades de seus clientes, outros colaboradores qualificados na Comunidade OpenJDK podem intervir para continuar mantendo a série de releases. Eles fazem isso de acordo com os padrões da Comunidade OpenJDK pelo tempo que escolherem, fazendo o backport das mudanças relevantes de releases posteriores ainda mantidas pela Oracle e por outros. Por exemplo, para o JDK 6, a Sun estabeleceu o projeto em 2008, e a Oracle continuou a mantê-lo até 2013. Outros mantenedores então continuaram trabalhando no projeto fazendo backport de atualizações de releases posteriores.

A Oracle apoia essas transições na Comunidade OpenJDK fornecendo um processo estabelecido para que elas ocorram dentro do JDK Updates Project, bem como assistência a novos mantenedores para se estabelecerem em seus novos papéis, e, por último, mas não menos importante, o Vulnerability Group.


❓ Pergunta 8: O que está acontecendo com o Java SE 8?

O Java SE 8 é o fim do legado do modelo de versionamento e ritmo de lançamento; o Java 9 foi o novo começo.

Para o Oracle JDK, o Java 8 está passando exatamente pelos mesmos processos de transição do Java 7 e Java 6, com algumas exceções. Primeiro, para dar tempo adicional para se acostumar ao novo modelo de lançamento, a Oracle estendeu as atualizações públicas de seu Oracle JDK para janeiro de 2019 para uso comercial em produção, e pelo menos até o final de 2020 para uso individual em desktop. Segundo, foram anunciados esforços para tornar o Oracle JDK intercambiável com os builds do OpenJDK da Oracle para aqueles que desejam migrar para as próximas releases, como fizeram para Java 6->7 e Java 7->8. Se ainda não o fez, a sugestão é migrar para o 10 e embarcar no novo trem de lançamentos. Finalmente, a Oracle postou mais informações sobre o roteiro para o Java Client (incluindo Applets e Web Start).

No front do OpenJDK, a Oracle planeja continuar liderando e contribuindo para o projeto JDK 8 Updates até janeiro de 2019, antes do qual será feita uma chamada para novos mantenedores (como tem sido prática por mais de uma década, consulte a pergunta anterior para mais detalhes).


❓ Pergunta 9: Sou um Cliente Oracle, como sou afetado?

Você está coberto pelo seu uso do Java SE dentro de um produto Oracle que tenha uma dependência do Java SE. Encontre mais detalhes via esta nota do My Oracle Support.


Nota de rodapé:

[1] – ;tldr para o plano que a Oracle anunciou para seus binários e builds – (a) mover todos os bits anteriormente de código fechado do Oracle JDK para o OpenJDK (b) publicar binários do OpenJDK sob a licença GPLv2+CPE e (c) garantir uma transição suave de modo que os binários do Oracle JDK e do OpenJDK sejam intercambiáveis.

💡 Um Resumo Rápido Sobre a Nova Assinatura Java SE

💡 Um Resumo Rápido Sobre a Nova Assinatura Java SE

Recentemente, foram anunciadas mudanças significativas no modelo de suporte e distribuição do Java SE. Este artigo apresenta um resumo dessas mudanças para ajudar desenvolvedores e empresas a entenderem o novo cenário.


🔍 Entendendo as Mudanças no Modelo de Suporte

O modelo de suporte do Java SE passou por uma evolução. Tradicionalmente, as atualizações públicas eram fornecidas gratuitamente para versões específicas. No novo modelo, para continuar recebendo atualizações de segurança e correções de bugs após um determinado período, é necessário uma assinatura.

Isso garante que as organizações que exigem suporte de longo prazo para ambientes de produção estáveis possam obtê-lo de maneira estruturada.


📦 O Que a Nova Assinatura Java SE Inclui?

A assinatura oferece benefícios essenciais para ambientes corporativos:

  • Atualizações de Segurança e Desempenho: Acesso contínuo a patches críticos.
  • Suporte Técnico: Assistência para resolver problemas em ambientes cobertos pela assinatura.
  • Licenças para Uso em Produção: Direito de executar as implementações relevantes do Java SE em ambientes produtivos.
  • Conformidade com Licenciamento: Ajuda a manter a conformidade com os termos de licenciamento do software Oracle.

🎯 Para Quem é Destinada Essa Assinatura?

A assinatura é voltada principalmente para empresas que utilizam o Java SE em ambientes de missão crítica e produção, especialmente aquelas que:

  • Precisam de suporte de longo prazo além dos ciclos públicos gratuitos.
  • Exigem garantias legais e de segurança fornecidas por um contrato comercial.
  • Possuem sistemas que não podem ser atualizados para novas versões principais frequentemente.

🆓 Alternativas Gratuitas e de Código Aberto

É importante destacar que existem opções gratuitas robustas disponíveis no ecossistema Java:

  • OpenJDK: A implementação de referência de código aberto do Java SE.
  • Binários de Outros Fornecedores: Diversos fornecedores oferecem builds gratuitos do OpenJDK com suporte opcional pago.

Essas alternativas são excelentes para desenvolvimento, teste e para muitas cargas de trabalho em produção.


🤔 Como Decidir o Que é Melhor para Você?

A escolha depende das necessidades específicas da sua organização. Recomenda-se considerar as seguintes perguntas:

  • Seu ambiente de produção requer suporte comercial com garantias contratuais?
  • Você precisa de atualizações de segurança para versões específicas do JDK por muitos anos?
  • A sua equipe precisa de acesso a suporte técnico direto do fornecedor?

Se a resposta for "sim" para essas questões, avaliar uma assinatura comercial é um passo prudente.


📚 Próximos Passos e Recursos

Para tomar uma decisão informada, consulte a documentação oficial e os detalhes dos termos de licenciamento. Recomenda-se também avaliar as necessidades de suporte de todos os times dentro da organização que utilizam Java.

O ecossistema Java continua vibrante, com múltiplas opções para atender a diferentes perfis de uso, desde desenvolvedores individuais até grandes corporações.

🚀 Avanço Rápido para o Java 11

Avanço Rápido para o Java 11

Com o Java 11 prestes a ser lançado, é momento de analisar o efeito que o novo ritmo de lançamentos teve na adoção das novas versões.


Mudando o Ritmo das Mudanças

As novas versões do Java costumavam levar um bom tempo para serem adotadas pelos desenvolvedores. Por exemplo, o Java SE 5.0 introduziu mudanças importantes, como anotações e genéricos, em 2004. Levou dois anos, até 2006, para que uma versão da IDE Eclipse que fosse testada e validada no Java SE 5.0 fosse lançada. Somente então os desenvolvedores que usavam o Eclipse puderam começar a adotar o Java SE 5.0 de forma plena como sua plataforma principal.

Muito mudou no ecossistema Java na década desde 2004. O Java SE 8 foi lançado em 2014, introduzindo outra grande mudança na linguagem: as lambda expressions. No entanto, em poucos dias, novas versões das IDEs Eclipse, IntelliJ IDEA e NetBeans, testadas e validadas no JDK 8, já estavam disponíveis. Isso permitiu que os desenvolvedores começassem a adotar o Java SE 8 quase imediatamente após seu lançamento.

E muitos o fizeram, tornando o Java SE 8 a versão mais rapidamente adotada até então. O número de downloads do JDK 8 aumentou mais de 30% em comparação com o JDK 7 no mesmo período inicial de lançamento.


Em Frente para o 9

Com o novo ritmo semestral de lançamentos do Java SE a partir do Java SE 9, vimos o mesmo padrão de suporte rápido às novas versões da plataforma pelas principais IDEs. Engenheiros continuam a trabalhar em conjunto com desenvolvedores de mais de 100 bibliotecas e ferramentas Java de código aberto populares em todo o ecossistema para remover possíveis barreiras à adoção de novas versões.

Consequentemente, muitas bibliotecas e ferramentas populares estavam prontas para o Java 9 no momento de seu lançamento, ou logo em seguida. Isso incluiu ferramentas como Apache Ant, Apache Maven, Gradle, bibliotecas como ByteBuddy, JUnit, JaCoCo, Apache Lucene e frameworks como Akka, Spring Framework e WildFly.

Como resultado, o número de downloads do JDK 9 no lançamento do Java SE 9 foi mais de 10% maior do que o do lançamento do JDK 8.


Avanço Rápido para o 10

Vimos um padrão semelhante entre os desenvolvedores com o JDK 10. O Java SE 10 registrou 20% mais downloads de JDK do que o JDK 8 no mesmo período durante o lançamento do Java SE 8. Assim como com o JDK 9, IDEs, ferramentas, bibliotecas e frameworks populares rapidamente anunciaram seu suporte para a nova versão do Java.

Isso mostra como um aspecto importante do novo ritmo de lançamentos está funcionando incrivelmente bem — ele realmente está colocando novos recursos do Java, como a inferência de tipo de variável local no Java SE 10, nas mãos de mais desenvolvedores muito mais rápido do que antes.


Em Direção ao 11

No passado, cada nova versão da plataforma Java levava vários anos para ser desenvolvida e, no processo, acumulava milhares de melhorias grandes e pequenas, mudanças e correções de bugs. Levava muito tempo para ser construída e depois levava muito tempo para se familiarizar com ela, devido ao escopo muito amplo de cada versão.

Sob o novo ritmo de lançamentos, cada versão de recurso do Java é entregue em uma fração do tempo que levava no passado e, consequentemente, cada versão tem um escopo muito menor. Como consequência, o tempo necessário para se familiarizar com ela é muito mais curto, pois há muito menos mudanças para assimilar. Na prática, isso significa que muitas das ferramentas, bibliotecas e frameworks populares que estavam prontos para o Java SE 9 e Java SE 10 já conseguiram se preparar para o Java SE 11.

Em outras palavras, desde o Spring Boot e Spring Framework, passando por Mockito e ByteBuddy, até Apache Cassandra, IntelliJ IDEA, Jenkins, Eclipse IDE e Atlassian, grandes partes do ecossistema Java anunciaram que estão prontas para o Java SE 11 ou que já estão trabalhando para suportá-lo.

Dado que esse é o caso, não deve ser surpresa que uma pesquisa recente tenha constatado que mais da metade dos entrevistados está considerando usar o Java SE 11 para implantação em um futuro próximo.

Para usuários que precisam adotar novas versões de forma mais conservadora, foi introduzida recentemente a Java SE Subscription: uma assinatura mensal simples e de baixo custo que inclui licenciamento e suporte do Java SE para uso em desktops, servidores ou implantações na nuvem. A assinatura fornece acesso a atualizações de desempenho, estabilidade e segurança testadas e certificadas para o Java SE, diretamente da fonte. Ela também inclui acesso ao suporte 24×7, suporte em 27 idiomas, recursos de gerenciamento, monitoramento e implantação de desktop do Java SE 8, entre outros benefícios.

O produto Java SE 11 é uma versão de suporte de longo prazo (LTS). A Java SE Subscription permite que esses usuários recebam atualizações nas versões LTS e permaneçam em uma determinada versão de lançamento LTS por pelo menos oito anos. As organizações podem facilmente adicionar às suas assinaturas a qualquer momento, conforme movem cargas de trabalho do desenvolvimento para a produção.

Usuários que não precisam adotar novas versões da plataforma de forma conservadora, por outro lado, podem continuar a aproveitar os benefícios de um rápido ritmo de lançamentos do Java, como foi o caso do JDK 9 e JDK 10, usando os builds do OpenJDK de código aberto e totalmente testados, conforme a plataforma Java continua a avançar mais rápido com a comunidade OpenJDK.

🚀 Apresentando o Java SE 11

Baixe o Java 11

O tempo voa! Nos últimos meses, foram anunciadas mudanças para evoluir a plataforma Java, garantindo que ela continue avançando com um futuro promissor para os usuários. Esses avanços incluíram:


Acelerando o Ritmo e a Previsibilidade das Entregas

Desde o lançamento do Java 9, a plataforma Java mudou para um ciclo de lançamento de seis meses, permitindo que os desenvolvedores tenham acesso mais rápido a melhorias contínuas. Os lançamentos agora ocorrem em março e setembro de cada ano, o que significa que não é mais necessário tentar absorver centenas de mudanças a cada dois anos de uma só vez – em vez disso, as mudanças são entregues em um ritmo mais mensurado e previsível.


Tornando o Java Ainda Mais Aberto

Para melhorar a produtividade dos desenvolvedores, recursos comerciais anteriormente acessíveis apenas com uma licença paga foram disponibilizados como código aberto. Isso cria maior alinhamento e intercambialidade entre as versões do Oracle JDK e do Oracle OpenJDK. Recursos comerciais anteriores agora disponíveis no OpenJDK incluem Application Class Data Sharing, o Project ZGC, o Java Flight Recorder (JFR) e o Java Mission Control (JMC). Mais recentemente, foram anunciados planos para disponibilizar a tecnologia JMC como um download separado para atender tanto aos usuários do OpenJDK quanto do Oracle JDK.


Introduzindo a Assinatura Java SE

Foi anunciada a Java SE Subscription, um novo modelo que cobre todas as necessidades de licenciamento e suporte do Java SE para dar ainda mais suporte aos milhões de empresas em todo o mundo que executam Java em produção. A assinatura complementa a oferta gratuita de longa data do Oracle OpenJDK, que atende desenvolvedores e organizações que não precisam de suporte comercial.


🆕 O Java 11 já está disponível

Com seis meses desde o Java 10 (o primeiro lançamento de recursos como parte do ciclo de seis meses), o Java 11 já está disponível.

O Oracle fornece o JDK não apenas sob a versão Oracle OpenJDK usando a licença de código aberto GNU General Public License v2, com a Classpath Exception (GPLv2+CPE), mas também sob uma licença comercial para quem usa o Oracle JDK como parte de um produto ou serviço Oracle, ou que não deseja usar software de código aberto. Estas substituem a histórica licença "BCL", que tinha uma combinação de termos comerciais gratuitos e pagos.

Isso significa que os usuários podem obter o Java 11 de acordo com suas necessidades:

  • Java 11 é uma versão de suporte de longo prazo (LTS). Isso significa que usuários mais conservadores com a adoção da plataforma e que exigem suporte de longo prazo podem licenciar os binários do Oracle JDK por meio da oferta Java SE Subscription. Permite que os usuários recebam atualizações na versão LTS do Java 11 por pelo menos oito anos. A assinatura fornece acesso a atualizações testadas e certificadas de desempenho, estabilidade e segurança para o Java SE, diretamente da Oracle. Também inclui acesso ao My Oracle Support (MOS) 24x7, suporte em 27 idiomas, recursos de gerenciamento, monitoramento e implantação do Java SE 8 Desktop, entre outros benefícios.
  • Usuários que preferem acesso rápido a novos aprimoramentos podem continuar usando a versão Oracle OpenJDK. Como foi o caso do Java 9 e Java 10, os usuários desta versão obtêm builds OpenJDK de código aberto, totalmente testadas e fornecidas pela Oracle.

🌟 Principais Aprimoramentos do Java 11

Dezessete aprimoramentos foram entregues no Java 11, incluindo mais notavelmente:

JEP 321 – Cliente HTTP (Padrão)

Este JEP padroniza a API de Cliente HTTP incubada introduzida no JDK 9, via JEP 110, e atualizada no JDK 10.

JEP 332 – Transport Layer Security (TLS) 1.3

O TLS 1.3 é uma grande reformulação do protocolo TLS e fornece melhorias significativas de segurança e desempenho em relação às versões anteriores.

JEP 328 – Java Flight Recorder (JFR)

O JFR fornece um mecanismo de gravação de alto desempenho e uma estrutura de coleta de dados de baixa sobrecarga para solução de problemas de aplicativos Java críticos.

// Exemplo de código com o JFR (conceitual)
// O JFR permite iniciar gravações para diagnóstico
try (Recording recording = new Recording()) {
    recording.start();
    // Seu código da aplicação aqui
    recording.stop();
    recording.dump(Paths.get("my-recording.jfr"));
}

JEP 333 – Project ZGC

O ZGC é um coletor de lixo (GC) experimental, mas previsível e de baixa latência, que pode lidar com heaps que variam de relativamente pequenos (algumas centenas de megabytes) a muito grandes (muitos terabytes) de tamanho.

JEP 330 – Executar Programas de Código-Fonte de Arquivo Único

Este aprimoramento simplifica a "entrada" para novos usuários Java, melhorando o launcher java para executar um programa fornecido como um único arquivo de código-fonte Java, incluindo o uso dentro de um script e/ou técnicas relacionadas. Por exemplo, um arquivo chamado HelloWorld.java contendo:

public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Olá, mundo!");
    }
}

Agora pode ser executado diretamente com:

java HelloWorld.java

🔮 Olhando para o Futuro

Agora que o Java 11 está geralmente disponível, o desenvolvimento mudou para o próximo lançamento de recursos de seis meses, na forma do Java 12, atualmente com duas melhorias direcionadas e mais a serem adicionadas à medida que o trabalho for concluído.

Com 12 milhões de desenvolvedores em todo o mundo usando Java, o Java continua sendo a linguagem de programação número 1 escolhida pelos programadores de software. E como o Java 11 demonstra, por meio de um planejamento contínuo e cuidadoso e do envolvimento do ecossistema, a plataforma Java está bem posicionada para o desenvolvimento moderno e o crescimento na nuvem.

🌐 Migrando para uma Web Livre de Plugins

Migrando para uma Web Livre de Plugins

No final de 2015, muitos fornecedores de navegadores removeram ou anunciaram cronogramas para a remoção do suporte a plugins baseados em padrões, eliminando a capacidade de incorporar Flash, Silverlight, Java e outras tecnologias baseadas em plugins.


Com os fornecedores de navegadores modernos trabalhando para restringir e reduzir o suporte a plugins em seus produtos, os desenvolvedores de aplicativos que dependem do plugin Java para navegadores precisam considerar opções alternativas, como migrar de Java Applets (que dependem de um plugin de navegador) para a tecnologia Java Web Start livre de plugins.


O Futuro do Plugin Java

Há planos de depreciar o plugin Java do navegador no JDK 9. Essa tecnologia será removida do Oracle JDK e JRE em uma versão futura do Java SE.


As versões de acesso antecipado do JDK 9 estão disponíveis para download e teste. Mais informações e opções de migração podem ser encontradas no artigo técnico da Oracle.


📄 Informação Técnica

Informações técnicas sobre a etapa de depreciação planejada no JDK 9 podem ser encontradas na JEP 289.

🚀 A Chegada do Java 12!

🚀 A Chegada do Java 12!

Após o lançamento do Java 9 em 2017, o ritmo de lançamentos da plataforma Java mudou de uma versão principal a cada 3+ anos para uma versão com novos recursos a cada seis meses. Isso fornece aos desenvolvedores um acesso mais previsível a melhorias contínuas. As versões com novos recursos agora ocorrem de forma confiável em março e setembro de cada ano. Chega de tentar gerenciar centenas de mudanças a cada dois anos de uma só vez – em vez disso, a mudança é entregue em um ritmo mais granular, rápido e gerenciável.


O Java 12 já está disponível!

A Oracle agora oferece o Java 12 para empresas e desenvolvedores. O JDK 12 receberá, no mínimo, duas atualizações, de acordo com o cronograma de CPU da Oracle, antes de ser seguido pelo Oracle JDK 13, previsto para setembro de 2019.

A Oracle fornece o Java 12 como a versão Oracle OpenJDK usando a licença de código aberto GNU General Public License v2, com a Classpath Exception (GPLv2+CPE), e também sob uma licença comercial para quem usa a versão Oracle JDK como parte de um produto ou serviço Oracle, ou que não deseja usar software de código aberto.


Java 12, Juntos

Semelhante ao Java 11, vale a pena celebrar as contribuições feitas para o Java 12 por muitos indivíduos e organizações na Comunidade OpenJDK — todos nós construímos o Java, juntos!

Proporção de Correções no JDK 12

A taxa geral de mudança no JDK ao longo do tempo permaneceu essencialmente constante por muitos anos, mas, sob o ritmo de seis meses, a velocidade na qual as inovações são entregues aos desenvolvedores melhorou muito. Em vez de disponibilizar dezenas de milhares de correções e cerca de cem JEPs em uma grande versão principal a cada poucos anos, os aprimoramentos são disponibilizados em versões de recursos menores em um cronograma previsível e mais gerenciável de seis meses. Essas mudanças podem variar de um recurso significativo a pequenas melhorias, manutenção de rotina, correções de bugs e melhorias na documentação. Cada uma dessas alterações é representada em um único commit para um único problema no JDK Bug System.

Dos 1.919 problemas do JIRA marcados como corrigidos no JDK 12, 1.433 foram concluídos por pessoas que trabalham para a Oracle, enquanto 486 foram contribuições de desenvolvedores individuais e desenvolvedores que trabalham para outras organizações. Analisar os problemas e compilar os dados da organização dos responsáveis resulta no seguinte gráfico de organizações que patrocinam o desenvolvimento de correções no JDK 12:

Embora os desenvolvedores empregados pela Oracle tenham resolvido 75% dos problemas do JIRA durante o desenvolvimento do JDK 12, 25% foram corrigidos por desenvolvedores que trabalham para outras organizações. Desenvolvedores que trabalham para as cinco próximas maiores organizações contribuintes, Red Hat (8%), Google (6%), SAP (4%), BellSoft (1%) e IBM (1%), corrigiram coletivamente 20% desses problemas. Desenvolvedores independentes contribuíram com 3% das correções no JDK 12.

Por último, mas não menos importante, os dois por cento restantes das correções foram contribuídos coletivamente por desenvolvedores de uma ampla gama de organizações, incluindo Alibaba, Amazon, ARM, Azul, Huawei, Intel, JetBrains, Linaro e Twitter.

Agradecimentos especiais também aos muitos desenvolvedores experientes que revisaram as mudanças propostas, aos primeiros usuários que testaram as compilações de acesso antecipado e relataram problemas, e aos profissionais dedicados que forneceram feedback nas listas de e-mail do OpenJDK.


🔧 Novos Aprimoramentos no Java 12

Oito melhorias são entregues com o Java 12:

JEP 325 – Switch Expressions (preview)

Estende a instrução switch para que possa ser usada como uma instrução ou uma expressão, e que ambas as formas possam usar um comportamento de escopo e fluxo de controle "tradicional" ou "simplificado". Essas mudanças simplificarão a codificação do dia a dia e também prepararão o caminho para o uso de correspondência de padrões (JEP 305) no switch. Para o JDK 12, esse recurso está disponível como um recurso de linguagem de visualização (JEP 12).

JEP 344 – Abortable Mixed Collections for G1

Torna as coletas mistas do G1 abortáveis se elas excederem o alvo de pausa.

JEP 346 – Promptly Return Unused Committed Memory from G1

Aprimora o coletor de lixo G1 para retornar automaticamente a memória do heap Java para o sistema operacional quando ociosa.

JEP 189 – Shenandoah, A Low-Pause-Time Garbage Collector (experimental)

Adiciona um novo algoritmo de coleta de lixo (GC) que reduz os tempos de pausa do GC fazendo o trabalho de evacuação simultaneamente com os threads Java em execução.

JEP 230 – Microbenchmark Suite

Adiciona um conjunto básico de microbenchmarks ao código-fonte do JDK e facilita para os desenvolvedores executar microbenchmarks existentes e criar novos.

JEP 334 – JVM Constants API

Introduz uma API para modelar descrições nominais de artefatos principais de arquivo de classe e tempo de execução, em particular constantes que podem ser carregadas do pool de constantes.

JEP 340 – One AArch64 Port, Not Two

Remove todas as fontes relacionadas à porta arm64, mantendo a porta ARM de 32 bits e a porta aarch64 de 64 bits.

JEP 341 – Default CDS Archives

Aprimora o processo de construção do JDK para gerar um arquivo de compartilhamento de dados de classe (CDS), usando a lista de classes padrão, em plataformas de 64 bits.


Com 12 milhões de desenvolvedores em todo o mundo, o Java continua sendo a linguagem de programação nº 1 de escolha dos programadores de software. E como a entrega pontual de melhorias com o Java 12 demonstra, por meio de um planejamento contínuo e cuidadoso e envolvimento do ecossistema, a plataforma Java está bem posicionada para o desenvolvimento moderno e crescimento na nuvem.

🇯🇵 Uma Nova Era (Japonesa) para o Java!

🇯🇵 Uma Nova Era (Japonesa) para o Java!

No dia a dia, o Japão usa o mesmo calendário que a maior parte do mundo, no qual estamos atualmente no ano de 2019 (da era comum). Para documentos oficiais e formais, o calendário japonês usa o mesmo dia e mês, mas um nome de era e anos dentro dessa era, em vez do ano da era comum. A era japonesa atual é Heisei (平成) e o ano de 2019 corresponde a Heisei 31.


🗾 Compreendendo as Eras Japonesas

No Japão moderno, uma era começa com a ascensão de um novo imperador e dura até a ascensão do próximo imperador. Por exemplo, a era 明治 Meiji durou até 30 de julho de 1912 (30 de julho Meiji 45). A era seguinte, 大正 Taishō, começou em 31 de julho de 1912 com a ascensão do Imperador Taishō. A primeira data seria 31 de julho Taishō 1, exceto que o primeiro ano de novas eras é sempre referido como 元年 (Gan-nen). Seria escrito como “31 de julho 大正元年” (Taishō Gan-nen).

Em 2016, o Imperador Akihito anunciou planos de abdicar do trono em favor de seu filho, o Príncipe Herdeiro Naruhito. O plano era abdicar em 30 de abril de 2019 (30 de abril Heisei 31). O nome da nova era, que começaria em 1º de maio de 2019, seria anunciado pelo gabinete japonês em 1º de abril de 2019.


⚙️ Preparativos no JDK para a Nova Era

Foram necessários alguns preparativos para a nova era, mas atualizações finais só poderiam ser concluídas após o anúncio oficial do nome da nova era. No JDK, especificamente, algumas mudanças foram planejadas:

  • Ao converter uma data Gregoriana para sua data equivalente no calendário japonês e renderizá-la como texto, é necessário saber o nome da era correto.
  • A operação inversa, converter uma string representando uma data na data correta, requer analisar o nome da era e saber a qual ano da era comum ela corresponde.
  • O Unicode adicionaria um novo caractere quadrado representando o nome da nova era.

A partir do JDK 8, as APIs Java possuem uma nova Data Time API (consulte o JSR 310), além da classe mais antiga java.util.Calendar, com métodos para manipular datas. Todas as APIs relevantes seriam atualizadas para lidar corretamente com a nova era.

Em preparação para as mudanças, o JDK 12 usaria um nome provisório para a nova era: 元号 (“NewEra”). Usando o JDK 12, seria possível ter uma ideia de como o nome da nova era seria tratado nas atualizações lançadas após o anúncio do nome.

Após o lançamento do nome da nova era, com a próxima atualização (planejada para 16 de abril de 2019), todas as versões suportadas do JDK: 7, 8, 11 LTS e 12 seriam atualizadas para lidar com a nova era.


💻 Exemplos de Código: Antes e Depois da Atualização

Em todas as versões suportadas, a classe java.util.Calendar seria atualizada para entender e retornar os valores corretos.

import java.util.*;
import java.text.*;

new SimpleDateFormat("GGGGyyyy年M月d日", Locale.forLanguageTag("ja-JP-u-ca-japanese")).
         format(new Calendar.Builder().
         setDate(2019, Calendar.MAY, 1).build().getTime());

// Antes da atualização: 平成31年5⽉1⽇
// Depois da atualização: 元号元年5⽉1⽇
// Nas versões lançadas após o novo anúncio, 元号 será substituído pelo novo nome da era.

A análise de uma data usando java.text.SimpleDateFormat funcionaria corretamente:

import java.text.*;

var sdf = new SimpleDateFormat("GGGGyyyy年M⽉d⽇",
           Locale.forLanguageTag("ja-JP-u-ca-japanese"));
sdf.setLenient(false);
new SimpleDateFormat("Y-M-d", Locale.US).format(sdf.parse("元号2年2⽉1⽇"));

// Resultado: “2020-2-1”
// Com 元号 substituído pelo novo nome da era

Para JDK 8 e posteriores, as novas APIs de data e hora JSR 310 também seriam atualizadas (JDK 7 não possui essas novas APIs).

import java.time.chrono.*;
import java.time.format.*;
import java.time.temporal.*;

DateTimeFormatter.ofPattern("GGGGy年M⽉d⽇").
         withChronology(JapaneseChronology.INSTANCE).
         withLocale(Locale.JAPAN).
         format(JapaneseDate.of(2020, 2, 1));

// Resultado: “元号2年2⽉1⽇”
DateTimeFormatter.ofPattern("u-M-d").format(
         DateTimeFormatter.ofPattern("GGGGy年M⽉d⽇").
         withChronology(JapaneseChronology.INSTANCE).
         withLocale(Locale.JAPAN).
         withResolverStyle(ResolverStyle.STRICT).
         parse("元号2年2⽉1⽇"));

// Resultado: “2020-2-1”
JapaneseEra.of(3).getDisplayName(TextStyle.FULL,
         Locale.forLanguageTag("ja-JP-u-ca-japanese"));

// Resultado: “元号”
// Com 元号 substituído pelo novo nome da era

No JDK 8 e posterior, o ponto de código Unicode U+32FF também seria incluído na classe java.lang.Character. O ponto de código U+32FF é reservado para o caractere quadrado da nova era japonesa.


✅ Resumo das Atualizações

Em resumo:

  • As atualizações do JDK lançadas após o anúncio do novo nome da era japonesa lidariam corretamente com o novo nome da era.
  • Até o nome da era ser divulgado, o JDK 12 (e, em menor extensão, o JDK 11) funcionaria de maneira semelhante à futura, mas usando 元号 como um nome provisório (*).

(*) Devido a um problema na análise de uma data em formato de string, seria necessário aguardar as atualizações do JDK de abril de 2019 para que a análise funcionasse corretamente.

📦 As Ofertas do Java SE: Um Guia para Desenvolvedores

🧭 O Ecossistema do Java SE

O ecossistema Java é incrivelmente diverso. Ele alimenta bilhões de dispositivos e servidores e é fundamental para a infraestrutura de nuvem em todo o mundo. Apenas a Plataforma Java, Standard Edition, ou "Java SE", que é a plataforma Java central para computação de uso geral, já possui uma grande diversidade.


📂 As Principais Áreas das Ofertas Java SE

1) OpenJDK

O OpenJDK é o local onde ocorre a colaboração para o desenvolvimento de uma implementação de código aberto da Plataforma Java, Standard Edition, e projetos relacionados. O compromisso com o OpenJDK permanece forte, tendo sido recentemente iniciado o projeto JDK 10. O OpenJDK conta com uma ampla participação em todo o ecossistema. A atividade no projeto tem crescido consistentemente.

Por exemplo, a maioria dos principais distribuidores de Linux e outras partes, como Red Hat, Canonical e SUSE, produzem e distribuem binários baseados neste código aberto. O código-fonte está disponível sob a popular licença GNU General Public License v2 (GPLv2), ou seja, é completamente gratuito. Licenças de código-fonte comerciais também estão disponíveis para empresas que desejam licenciar o código-fonte para uma infinidade de propósitos, e dezenas o fizeram.


2) A Implementação Oracle do Java SE ("Oracle JDK" e "Oracle JRE")

O Oracle JRE/JDK é a implementação Oracle do Java SE. Assim como muitas outras empresas fornecem suas implementações do Java SE para seus clientes, a Oracle também o faz. Existem dois canais principais para as distribuições binárias:

  • java.com: Destinado a consumidores que desejam executar o Java Runtime Environment (JRE) em seus computadores pessoais para aplicativos como Minecraft ou outros softwares de consumo baseados em Java.
  • Java Development Kit (JDK) no OTN: Voltado para desenvolvedores e empresas.

Esses binários são gratuitos para a grande maioria dos casos de uso, conforme observado em java.com/license.


3) Oracle Java SE Advanced, Java SE Advanced Desktop, Java SE Suite

Além da implementação central do Java SE, a Oracle também fornece ferramentas e recursos avançados adicionais voltados para usuários corporativos. Esses recursos incluem ferramentas para ajudar a monitorar, gerenciar e implantar Java em um ambiente empresarial, diagnóstico e monitoramento avançado de tempo de execução, bem como acesso a suporte e atualizações para versões legadas do Java SE, como Java SE 6 e Java SE 7.

Esses recursos comerciais são fornecidos como downloads separados. Na medida em que precisam interagir com o Oracle JRE, eles são desativados por padrão nesse produto e podem ser habilitados usando o sinalizador

-XX:+UnlockCommercialFeatures
em tempo de execução na sua JVM. Mais informações sobre recursos comerciais específicos podem ser encontradas na Tabela 1-1 do link oficial da documentação.


4) Java SE Embedded

Conforme observado na seção (2), o Oracle JRE/JDK é gratuito para a maioria dos casos de uso em que é executado em um desktop ou servidor de uso geral. Se um cliente desejar incorporar o Oracle JDK/JRE em um dispositivo de algum tipo (por exemplo, um caixa registradora), a licença BCL gratuita não se aplica. Nesses casos, uma licença comercial de Java SE Embedded precisa ser negociada.

O Java SE Embedded também oferece opções binárias adicionais para dispositivos com recursos limitados e conjuntos de chips mais orientados para sistemas embarcados.

🚀 A Chegada do Java 14!

A Chegada do Java 14!

Anuncia-se com orgulho a disponibilidade geral do Java 14, representando a quinta release de funcionalidades como parte do ciclo de seis meses. Esse nível de previsibilidade, há mais de dois anos, permite que os desenvolvedores gerenciem mais facilmente a adoção de inovações graças a um fluxo constante de mudanças esperadas.


O Java 14 já está disponível!

O Java 14 agora está disponível para todos os desenvolvedores e empresas. O Oracle JDK 14 receberá um mínimo de duas atualizações trimestrais, conforme a programação do Oracle Critical Patch Update (CPU), antes de ser seguido pelo Oracle JDK 15. O Java 15 alcançará disponibilidade geral em setembro de 2020, mas as builds de acesso antecipado já estão sendo oferecidas em jdk.java.net.

Mais uma vez, o Java 14 é fornecido como o release Oracle OpenJDK usando a licença de código aberto GNU General Public License v2, com a Classpath Exception (GPLv2+CPE), e também sob uma licença comercial para aqueles que usam o release Oracle JDK como parte de um produto ou serviço Oracle, ou para aqueles que preferem licenças comerciais em vez de licenças de código aberto.


Java 14, Juntos

Semelhante ao Java 11, Java 12 e Java 13, continuamos a celebrar as contribuições feitas para o Java 14 por muitos indivíduos e organizações na Comunidade OpenJDK — todos construímos o Java juntos!

📈 Taxa de Correções do JDK 14

A taxa geral de mudança ao longo do tempo no JDK permaneceu essencialmente constante por muitos anos, mas sob o ciclo de seis meses, o ritmo no qual inovações prontas para produção são entregues melhorou muito. Em vez de disponibilizar dezenas de milhares de correções e cerca de cem JDK Enhancement Proposals (JEPs) em um grande release principal a cada poucos anos, os aprimoramentos são entregues em releases de funcionalidades menores em uma programação de seis meses mais gerenciável e previsível.

Essas mudanças podem variar de uma funcionalidade significativa a pequenos aprimoramentos, manutenção de rotina, correções de bugs e melhorias na documentação. Cada mudança é representada em um único commit para um único problema no JDK Bug System.

Dos 1.986 problemas do JIRA marcados como corrigidos no JDK 14, 1.458 foram concluídos por pessoas que trabalham para a Oracle, enquanto 528 foram contribuições de desenvolvedores individuais e desenvolvedores que trabalham para outras organizações.


🆕 Novidades no Java 14

O Java 14 oferece aos usuários dezesseis aprimoramentos/mudanças principais, incluindo dois módulos incubadores, três funcionalidades de pré-visualização, dois recursos depreciados e duas remoções.

Alguns aprimoramentos são introduzidos em módulos Incubadora, um meio de colocar APIs e ferramentas não finais nas mãos dos desenvolvedores, permitindo que os usuários ofereçam feedback que pode melhorar a qualidade da plataforma Java.

Da mesma forma, alguns aprimoramentos são introduzidos como Funcionalidades de Pré-visualização – funcionalidades de linguagem ou da VM da Plataforma Java SE que são totalmente especificadas, totalmente implementadas, mas ainda não permanentes. Elas estão disponíveis em um release de funcionalidade do JDK para provocar feedback dos desenvolvedores com base no uso do mundo real, o que pode levar a que se tornem permanentes em um release futuro.

Finalmente, algumas mudanças visam reduzir o tamanho e o escopo do JDK por meio de Depreciação, que é uma técnica para comunicar informações sobre o ciclo de vida de uma API: incentivar aplicativos a migrarem para longe da API, desencorajar aplicativos de formarem novas dependências na API e informar os desenvolvedores sobre os riscos de continuar dependendo da API. Com a ferramenta jdeprscan, introduzida pela primeira vez no Java 9, os usuários podem realizar análise estática de seus arquivos jar (ou alguma outra agregação de arquivos de classe) para identificar usos de elementos de API depreciados, permitindo assim que se preparem com antecedência para sua remoção futura.


Os 16 JEPs entregues com o JDK 14 são:

  • JEP 305Pattern Matching para instanceof (Pré-visualização): Aprimora o Java com pattern matching para o operador instanceof.
  • JEP 343 – Ferramenta de Empacotamento (Incubadora): Fornece uma maneira para os desenvolvedores empacotarem aplicações Java para distribuição em formatos específicos de plataforma.
  • JEP 345 – Alocação de Memória Consciente de NUMA para G1: Melhora o desempenho geral do coletor de lixo G1 em sistemas de acesso não uniforme à memória (NUMA).
  • JEP 349 – Transmissão de Eventos JFR (JFR Event Streaming): Expõe dados do JDK Flight Recorder (JFR) para monitoramento contínuo.
  • JEP 352Non-Volatile Mapped Byte Buffers: Adiciona um modo de mapeamento de arquivo para o JDK ao usar memória não volátil.
  • JEP 358NullPointerExceptions Mais Úteis: Melhora a usabilidade das NullPointerExceptions descrevendo com precisão qual variável era nula.
  • JEP 359 – Registros (Pré-visualização): Fornece uma sintaxe compacta para declarar classes que mantêm dados superficialmente imutáveis.
  • JEP 361 – Expressões Switch: Esta foi uma funcionalidade de pré-visualização no JDK 12 e JDK 13 e agora é uma funcionalidade concluída.
  • JEP 362 – Depreciar as Portas Solaris e SPARC: Este JEP deprecia as portas Solaris e SPARC com a intenção de removê-las em um release futuro.
  • JEP 363 – Remover o Coletor de Lixo Concurrent Mark Sweep (CMS): O coletor de lixo CMS foi depreciado há mais de dois anos.
  • JEP 364 – ZGC no macOS: A funcionalidade ZGC foi portada para Windows e macOS.
  • JEP 365 – ZGC no Windows: Por favor, consulte o resumo para o JEP 364.
  • JEP 366 – Depreciar a Combinação de GC ParallelScavenge + SerialOld: Deprecia a combinação dos algoritmos de coleta de lixo Parallel Scavenge e Serial Old.
  • JEP 367 – Remover as Ferramentas e API Pack200: Remove as ferramentas pack200 e unpack200, e a API Pack200 no pacote java.util.jar.
  • JEP 368 – Blocos de Texto (Segunda Pré-visualização): Após receber feedback quando os Blocos de Texto foram introduzidos pela primeira vez como uma funcionalidade de pré-visualização (JEP 355) como parte do Java 13, duas novas sequências de escape foram adicionadas.
  • JEP 370 – API de Acesso à Memória Estrangeira (Incubadora): Este módulo incubador introduz uma API para permitir que programas Java acessem com segurança e eficiência memória estrangeira fora do heap Java.

🔧 Suporte a Ferramentas

O suporte de ferramentas atual e atualizado ajuda a impulsionar a produtividade do desenvolvedor. Com o Java 14, continuamos a acolher os esforços dos principais fornecedores de IDE, cujas soluções de ferramentas oferecem aos desenvolvedores suporte para as versões atuais do Java.

As ferramentas populares de automação de compilação usadas principalmente para projetos Java também estão preparadas para oferecer suporte ao Java 14 aos desenvolvedores. Tanto o Apache Maven e seus plug-ins, quanto o candidato a release do Gradle 6.3, suportam o Java 14.

O Java continua sendo a linguagem de programação número 1 escolhida pelos programadores de software. Como a entrega pontual de melhorias com o Java 14 demonstra, por meio de um planejamento contínuo e cuidadoso e do envolvimento do ecossistema, a plataforma Java está bem posicionada para o desenvolvimento moderno e o crescimento na nuvem.

🚀 Atualizações do Roteiro (Roadmap) para o Cliente Java

Atualizações do Roteiro para o Cliente Java


Foi publicada uma atualização do Roteiro para o Cliente Java, que estende os prazos de disponibilidade e suporte para muitas tecnologias relacionadas ao cliente Java.

Resumo Executivo


☑️ Suporte Estendido para Java SE 8: O suporte e as atualizações comerciais para Java SE 8 foram estendidos de março de 2025 para, pelo menos, dezembro de 2030.

🆓 Atualizações para Uso Pessoal: A disponibilidade de atualizações para uso pessoal (não comercial) do Java SE 8 foi estendida indefinidamente. Será fornecido um aviso de pelo menos 18 meses se uma data de fim de disponibilidade for definida.

🕸️ Suporte Contínuo ao Java Web Start: O suporte comercial para o Java Web Start no Java SE 8 continuará sendo oferecido por meio de assinaturas Java SE, produtos Java SE legados ou quando usado com produtos Oracle que dependem dele, até pelo menos dezembro de 2030. Ele também permanecerá disponível para uso pessoal enquanto as atualizações do Java SE 8 estiverem. Recomenda-se que os desenvolvedores migrem para outras alternativas de entrega.

⚠️ Status dos Applets Java: Os Applets não têm mais suporte desde março de 2019, mas permanecem disponíveis para Windows e continuam recebendo atualizações no Java SE 8. Não há planos de remover os componentes necessários para executá-los no Internet Explorer 11, mas isso pode acontecer com pouco ou nenhum aviso.

🎨 JavaFX e OpenJFX: O suporte ao JavaFX com o Oracle Java SE 8 foi estendido de março de 2022 até pelo menos março de 2025. A reestruturação e transição do JavaFX para o OpenJFX como um módulo independente foi concluída no Java SE 11. O compromisso de continuar co-liderando e colaborando no projeto OpenJFX é reafirmado.

🖥️ Swing e AWT: São reafirmados como tecnologias fundamentais do Java SE em todas as versões e linhas do tempo de suporte.


Para obter informações mais detalhadas, consulte o Roteiro para o Cliente Java.

🚀 Convergência do Oracle Java SE Embedded com o Oracle JDK

🚀 Convergência do Oracle Java SE Embedded com o Oracle JDK

A estratégia de produtos Java da Oracle evoluiu para simplificar o fornecimento e o desenvolvimento para a comunidade. Um marco importante nessa jornada é a convergência do Oracle Java SE Embedded com o Oracle JDK.


📈 O Caminho para a Convergência

Historicamente, o Java SE Embedded era oferecido como um produto distinto do JDK, com seu próprio ciclo de lançamento e pacotes. Essa abordagem atendia a necessidades específicas de dispositivos com recursos limitados. Com os avanços na tecnologia de hardware e nas eficiências da JVM, a linha que separa os ambientes "incorporados" dos "gerais" tornou-se cada vez mais tênue.

A convergência representa um esforço para unificar essas ofertas. O objetivo é fornecer um único JDK robusto e eficiente que possa atender a uma ampla gama de dispositivos, desde servidores de grande porte até dispositivos de borda e incorporados.


🎯 Benefícios Principais da Convergência

Esta unificação traz vantagens significativas para desenvolvedores e empresas:

  • Simplicidade: Uma única distribuição JDK para a maioria dos ambientes, reduzindo a complexidade de escolha e manutenção.
  • Inovação mais Rápida: Os desenvolvedores têm acesso aos recursos mais recentes do Java SE em todos os ambientes simultaneamente.
  • Eficiência Aprimorada: O JDK convergido incorpora otimizações de desempenho e redução de footprint que beneficiam todas as implementações.
  • Padronização: Uma base de código comum garante consistência no comportamento e nas APIs, facilitando o desenvolvimento e a portabilidade de aplicações.
  • Sustentabilidade de Longo Prazo: Foco em um código-base principal facilita a manutenção e os investimentos futuros em melhorias.

⚙️ Implicações para Dispositivos com Recursos Limitados

Para cenários incorporados tradicionais, o JDK convergido oferece modos de configuração e ferramentas que permitem otimizar o footprint para atender a restrições de memória e processamento. A modularidade introduzida com o Java 9 (Project Jigsaw) é fundamental aqui, permitindo criar imagens de tempo de execução personalizadas e mínimas.

Por exemplo, pode-se usar a ferramenta jlink para criar uma imagem de tempo de execução (JRE) que inclua apenas os módulos necessários para a aplicação específica.

jlink --module-path jmods --add-modules java.base,java.logging --output meu-jre-customizado

🔮 O Futuro do Java em Ambientes Diversificados

A convergência não significa que "um tamanho serve para todos" de forma ingênua. Em vez disso, fornece uma base tecnológica comum e altamente otimizada que pode ser adaptada para diferentes perfis de dispositivo através de configuração, modularidade e ferramentas. A visão é de um ecossistema Java mais coeso, ágil e preparado para a próxima geração de aplicações, desde a nuvem até a borda da rede.

Esta mudança reforça o compromisso com a plataforma Java como um ambiente de desenvolvimento moderno, eficiente e universal, simplificando a jornada do desenvolvedor enquanto amplia os possíveis casos de uso.

🚀 O Futuro do JavaFX e Outras Atualizações do Roteiro para Clientes Java

O Futuro do JavaFX e Outras Atualizações do Roteiro para Clientes Java


A partir do JDK 11, o JavaFX está sendo disponibilizado como um download separado, desvinculado do JDK. Essas mudanças abrem caminho para que novos colaboradores se envolvam na comunidade de código aberto OpenJFX. Enquanto isso, os clientes da Oracle podem se beneficiar do suporte comercial contínuo para o JavaFX no Oracle JDK 8 até pelo menos 2022.


O JavaFX foi apresentado publicamente na JavaOne 2007. Ele foi imediatamente comparado com o Adobe Flex e o Microsoft Silverlight por suas capacidades de script e interface do usuário acelerada por hardware e multiplataforma. A tecnologia foi totalmente aberta em 2011 e se tornou parte do download do Oracle JDK um ano depois. Sob a gestão da Oracle, ela continuou evoluindo na comunidade OpenJDK, atraindo seu próprio grupo de seguidores apaixonados como um kit de ferramentas para aplicativos de desktop multiplataforma.


O JavaFX encontrou um público entre desenvolvedores e ISVs que produzem aplicativos de desktop únicos e soluções para mercados específicos, misturando tecnologias multimídia, web e de visualização. Há uma série de bibliotecas, estruturas e ferramentas de código aberto disponíveis para os desenvolvedores.


👷 Desacoplamento e Suporte Contínuo

Com o Sistema de Módulos da Plataforma Java em vigor desde o Java SE 9, agora é mais viável desacoplar o JavaFX do JDK, para disponibilizá-lo como um download separado. Isso facilitará para os desenvolvedores que usam o JavaFX ter mais liberdade e flexibilidade com a estrutura. Além disso, com o foco no aumento do ritmo de lançamento do OpenJDK, o JavaFX precisa ser capaz de avançar em um ritmo impulsionado pelas contribuições da Oracle e de outros na comunidade OpenJFX. O plano é implementar esse desacoplamento começando com o Java 11 (18.9 LTS).


Há algumas semanas, foi anunciada a extensão das atualizações públicas do Java 8 até pelo menos janeiro de 2019 e até 2020 para uso pessoal (não corporativo). Mais detalhes estão disponíveis em um white paper. O documento também fornece informações adicionais sobre o suporte a Applets e Web Start no Java SE 8, pois eles não serão incluídos no Java 11 (18.9 LTS). Finalmente, há mais informações sobre o roteiro para o JavaFX, incluindo os planos de enviar e dar suporte ao JavaFX no Oracle JDK 8 pelo menos até 2022.

sexta-feira, 11 de junho de 2021

🏆 Vencedores do Duke’s Choice Award 2019!

🏆 Vencedores do Duke’s Choice Award 2019!


Nos últimos 24 anos, a tecnologia Java expandiu o cenário inovador de aplicações e soluções com as quais interagimos pessoal ou profissionalmente. E os próximos 24 anos prometem ser ainda mais inovadores, trazendo oportunidades maiores para o panorama tecnológico. E isso se deve à diversidade de mentes criativas que usam o Java para avançar o mundo com o qual interagimos todos os dias.


Desde 2002, o Java Platform Group da Oracle tem concedido o Duke’s Choice Award a inovadores que usaram as tecnologias Java de uma maneira única e inovadora, seja para um projeto, contribuições pessoais, em um produto, como parte de um programa ou em um serviço. Essas inovações representaram trabalhos em andamento, pesquisas contínuas, soluções disponíveis ou implementações de Java que auxiliam na entrega ou execução de funcionalidades produtivas em uma ampla gama de ambientes, casos de uso e indústrias, como em uma empresa, instituição de pesquisa, instituição educacional, programa sem fins lucrativos ou projeto de código aberto, por exemplo.


O Duke’s Choice Award deste ano foi concedido a um grupo seleto de inovadores cujas contribuições para o ecossistema Java melhoraram o mundo ao nosso redor. O Java Platform Group da Oracle tem o orgulho de reconhecer:


🎯 JUnit

Reconhecimento por produtividade do desenvolvedor.


🤝 JavaBin

Reconhecimento por capacitação do ecossistema.


🏥 CarePay

Reconhecimento por inovação em saúde.


🌍 Jakarta EE

Reconhecimento por contribuição ao código aberto.


🎓 Dataverse

Reconhecimento no âmbito universitário/ensino superior.


🌟 Chris Thalinger

Reconhecimento da comunidade.


📚 Denver Java User Group

Reconhecimento pelo aprendizado de desenvolvedores.


O Java Platform Group da Oracle agradece pela ampla variedade de usos da tecnologia Java no vasto ecossistema de desenvolvedores e está ansioso para reconhecer os futuros vencedores em 2020.

🌍 Nosso Mundo. Movido por Java.

🌍 Nosso Mundo. Movido por Java.


Uma Jornada de 25 Anos

É difícil acreditar que já se passaram 25 anos desde que o Java se tornou oficialmente disponível. Por outro lado, parece que várias eras se passaram – e, de certo modo, passaram mesmo.


O Início de Uma Missão

Mesmo sendo um grupo pequeno, a equipe pensava grande. Havia tantas empresas e pessoas que acreditavam na perspectiva de "escreva uma vez, execute em qualquer lugar" que o desafio não era como cobrir todo o hardware e sistemas operacionais diferentes, mas sim como canalizar, focar e organizar os esforços de tantas partes que queriam... participar da festa!

Felizmente isso aconteceu – e elas participaram. E agora, 25 anos depois, é uma alegria celebrar "o primeiro quarto de século do Java".


Uma Visão Superada

Hoje, aquela visão original, por mais ambiciosa que fosse, foi alcançada e superada muitas vezes, conforme o Java evoluiu para ajudar os desenvolvedores a enfrentar novos desafios. A indústria de software abraçou o Java porque ele tornou o desenvolvimento um prazer, resolveu problemas de distribuição e eliminou a dor de portar constantemente entre plataformas.

O Java foi aproveitado pelo universo crescente de websites e fez o conteúdo estático ganhar vida, não apenas com coisas divertidas como o Duke quicando, mas também com uso real para a distribuição de aplicativos de negócios.

A utilidade do Java se multiplicou quando as pessoas perceberam como ele poderia resolver seus problemas em servidores – elevando a produtividade, o desempenho e a escalabilidade a novos patamares. Da distribuição de software pela internet à escalabilidade do lado do servidor da arquitetura multicamada, do aproveitamento de arquiteturas de hardware em constante melhoria às implantações nativas em nuvem, e muito mais.


Constância na Mudança

Durante todo esse tempo, aqueles que escolheram apostar no Java foram recompensados com uma tecnologia que evoluiu continuamente para apoiá-los. Através de mudanças constantes na indústria, o Java forneceu uma batida constante de estabilidade, compatibilidade e um ecossistema cada vez maior de ferramentas, bibliotecas e frameworks para escolher.


Uma Visão que Permanece

A visão é a mesma hoje como era então – uma busca incessante pela produtividade do desenvolvedor e pelo desempenho do programa, mantendo a legibilidade e a compatibilidade diante de um cenário tecnológico em constante evolução.


Celebrando o Presente e o Futuro

Para marcar o 25º aniversário do Java, está sendo usado o tema "Nosso Mundo. Movido por Java." Esta celebração tem como objetivo honrar o passado, reconhecer o presente e oferecer um vislumbre do futuro... bem como agradecer às muitas vozes influentes na comunidade Java.

Conforme o Java nos leva adiante através dos avanços tecnológicos, um conjunto diversificado de programas comunitários destacará inovadores, inovações e organizações que movem o mundo com Java. Desde empresas que constroem aplicativos dos quais dependemos todos os dias, até professores que transmitem o ofício da programação para a próxima geração de desenvolvedores, e alunos que carregarão a tocha por muitos anos vindouros. E através de tudo isso, será compartilhada a contínua liderança tecnológica e a administração comunitária que estão impulsionando a inovação e evolução contínuas do Java.

Há um convite para participar do webcast online inaugural que acontecerá em 20 de maio, onde muitos rostos técnicos e comunitários reconhecidos compartilharão suas memórias e insights sobre o Java.

Além disso, como uma oferta especial, a Oracle University está oferecendo o exame de certificação Java por apenas US$ 25. Esta oferta especial é válida até 25 de abril de 2021.


Seguindo em Frente

25 anos? Sim, tem sido uma jornada incrível, mas é uma jornada que continua avançando. Vamos manter o mundo avançando e tornar os próximos 25 anos ainda melhores... JUNTOS!

Nosso Mundo. Movido por Java.

💻 Java e a Nova Personalidade do Duke: Conheça o Duke Surfista da Nuvem!

Java e a Nova Personalidade do Duke

Por mais de 24 anos, a tecnologia Java tem avançado o mundo com o qual interagimos todos os dias. Com a gestão da Oracle, a tecnologia Java continua a oferecer aos desenvolvedores funcionalidades inovadoras para construir a próxima geração de aplicações que trazem utilidade para nós, tanto pessoal quanto profissionalmente.


E durante a história do Java, ela foi representada pela personalidade altamente reconhecida do Duke. Nos primeiros dias do desenvolvimento Java, a equipe do Projeto Green da Sun Microsystems criou sua primeira demonstração funcional — um controlador interativo de entretenimento doméstico portátil chamado Star7. No coração da interface de usuário animada de tela sensível ao toque estava um personagem de desenho animado chamado Duke.


O Duke saltitante e dando cambalhotas foi criado por um dos artistas gráficos da equipe. Ele seguiu para trabalhar em filmes animados populares como Shrek, Sobre Rodas e A Casa Monstro.


O Duke foi projetado para representar um "agente de software" que realizava tarefas para o usuário. Duke era o anfitrião interativo que permitia um novo tipo de interface de usuário que ia além dos botões, mouses e menus pop-up do mundo da computação desktop.


O Duke foi instantaneamente adotado. Na verdade, quase ao mesmo tempo em que o Java foi introduzido e o primeiro logo da xícara de Java foi encomendado, o Duke se tornou o mascote oficial da tecnologia Java. Em 2006, o Duke foi oficialmente "aberto" sob uma licença BSD. Desenvolvedores e designers foram incentivados a experimentar com o Duke e, pela primeira vez, tiveram acesso às especificações gráficas do Duke por meio de um projeto no java.net. Os esforços em torno do Duke agora são hospedados como "Project Duke" no OpenJDK.


Na Oracle, o Duke também é celebrado. Um Duke em tamanho real foi uma atração popular em todas as conferências de desenvolvedores JavaOne, e agora no principal evento de desenvolvedores da Oracle... o Oracle Code One.


🎉 Dando as Boas-Vindas ao Duke Surfista da Nuvem!

Este ano, a Oracle está lançando uma nova personalidade para o Duke que incorpora o espírito aberto e inovador e como o Java continua a se projetar para o futuro. Ajude a dar as boas-vindas ao Duke Surfista da Nuvem!