No dia 18/03, durante o evento EclipseCon, a Oracle anunciou a versão completa e estável (GA) do Java 8, a primeira grande atualização dos últimos 2 anos. O download está disponível para Linux e Windows no formato 32 ou 64 bits, e também para Mac OS X e Solaris 64 bits. Há também um versão para ARM (compilador para o Hard Float ABI) que pode ser usado no Raspbian e em outras plataformas do Raspberry Pi.
O Java 8 traz muitas melhorias e novas funcionalidades. Dentre as quais podemos destacar:
- Lambdas fornecem uma maneira de passar funções como dados. Com a conversão implícita para tipos de Single Abstract Method (Método Abstrato Simples, tal como o Runnable) simplificará muito o código necessário para passar filtros ou atributos como dados. (Note que a razão pela qual isso é chamado de lambdas é que o Java possui closures na forma de classes internas desde a versão 1.1; o que alguns chamam de forma incorreta de closures, na verdade estão falando de lambdas.) Um exemplo de lambda é x -> x + 1;
- Referências de métodos permitem que métodos estáticos possam ser referenciados como funções que podem ser passadas para outras funções. Um exemplo pode ser o Integer::parseInt, que pode ser mapeado para uma coleção de Strings para produzir uma coleção de Integers;
- Streams que fornecem um iteração no estilo lazy dos valores, tanto a partir de uma coleção, como de uma série infinita (tal como a ThreadLocalRandom) ou de um intervalo fixo (tal com os produzidos pelo byIntStream); bem como a iteração sobre os dados, sendo permitido processar em paralelo e realizar reduções, filtragens e mapeamentos que permitem que a combinação com lambdas forneça construções de programação funcional em Java;
- Os métodos de extensão permitem uma maneira de adicionar novos métodos para interfaces que já existem no Java sem a necessidade recompilar as classes que utilizam essas interfaces. Isso é usado em uma grande quantidade de classes de coleções para fornecer interfaces para a implementação de streams e outras referências úteis que de outra forma deveriam estar na classe utilitária Collections;
- JSR310 adicionou o novo processamento de data e hora no Java, para evitar os problemas excessivos da classe java.util.Date e dos pacotes relacionados;
- PermGen nunca mais; os desenvolvedores não precisarão mais adicionar a flag -XX:PermGen para adivinhar antes da hora qual a quantidade de strings serão criadas internamente pela aplicação;
- Nashorn adicionou suporte nativo para JavaScript na JVM, permitindo que o Java e outras linguagens baseadas na JVM possam utilizar as vantagens do JavaScript nas suas aplicações;
- OpenJFX trouxe o JavaFX para o OpenJDK, preparando o terreno para que as IDEs futuras possam utilizar esse sistema de interface gráfica de usuário.
Assim como o Java 8, todos os grandes fabricantes de IDEs anunciaram o suporte ao Java 8 no mesmo dia, como o patch disponível para o Eclipse 4.3.2, uma pequena versão do IntelliJ 13.1 e a nova versão do NetBeans 8.0.