Tiger:
Tiger:
Funcionalidades do Java 5,
Funcionalidades do Java 5,
a nova versão da plataforma
a nova versão da plataforma
Java
Java
Summa Technologies
Summa Technologies
Sobre o palestrante
JSR Community Manager @ java.netJSR Community Manager @ java.net
Expert na JSR 207 (PD4J)Expert na JSR 207 (PD4J)
Thinlet commiterThinlet commiter
Contributor do AspectWerkzContributor do AspectWerkz
Membro da organização do SouJavaMembro da organização do SouJava
SCPJ 1.2 & 1.4, SCWCD, SCMADSCPJ 1.2 & 1.4, SCWCD, SCMAD
5 anos de experiência com Java5 anos de experiência com Java
Tiger - Revolução?
Por que tanta expectativa?Por que tanta expectativa?
• Novas features na linguagemNovas features na linguagem
• Mudanças de design em classes do Mudanças de design em classes do core
core
• Novos padrões para integração e Novos padrões para integração e monitoramento da VM
monitoramento da VM
Como está sendo definida
JCP – JSR 176: J2SE 5.0 (Tiger) JCP – JSR 176: J2SE 5.0 (Tiger)
Release Contents
Release Contents ObjetivosObjetivos
• Confiabilidade, disponibilidade e Confiabilidade, disponibilidade e serviços (monitoramento e
serviços (monitoramento e
gerenciamento)
gerenciamento)
JSR guarda-chuva
JSR 176 não define nenhuma API, mas JSR 176 não define nenhuma API, mas sim quais JSRs deverão ser incluídas no
sim quais JSRs deverão ser incluídas no
Tiger
Tiger
Fazem parte do Tiger:Fazem parte do Tiger:
• JSR 003 – JMXJSR 003 – JMX
• JSR 013 – Decimal Arithmetic JSR 013 – Decimal Arithmetic Enhancement
Enhancement
• JSR 014 – GenericsJSR 014 – Generics
JSR guarda-chuva (cont)
Fazem parte do Tiger (cont):Fazem parte do Tiger (cont):• JSR 114 – JDBC RowsetJSR 114 – JDBC Rowset
• JSR 133 – Memory modelJSR 133 – Memory model
• JSR 160 – JMX-RemotingJSR 160 – JMX-Remoting
• JSR 163 – ProfilingJSR 163 – Profiling
• JSR 166 – Concurrency UtilitiesJSR 166 – Concurrency Utilities
JSR guarda-chuva (cont)
Fazem parte do Tiger (cont):Fazem parte do Tiger (cont):• JSR 175 – MetadataJSR 175 – Metadata
• JSR 200 – Network Transfer FormatJSR 200 – Network Transfer Format
• JSR 201 – Enums, autoboxing, JSR 201 – Enums, autoboxing,
extended for loops, static import and
extended for loops, static import and
varargs
varargs
• JSR 204 – Unicode Supplementary JSR 204 – Unicode Supplementary Character Support
Character Support
JSR-013: Decimal
Enhancement
BigDecimal modificado para BigDecimal modificado para
suportar melhor operações de
suportar melhor operações de
ponto flutuante
ponto flutuante
Introduzidas as classes Introduzidas as classes
java.math.MathContext e
java.math.MathContext e
java.math.RoundingMode
java.math.RoundingMode
Métodos para divisão inteira, resto Métodos para divisão inteira, resto
da divisão e exponenciação foram
JSR 014 – Generics
Uma das JSRs mais antigas do Uma das JSRs mais antigas do
JCP
JCP
Melhoram o mecanismo de tipos da Melhoram o mecanismo de tipos da linguagem
linguagem
Várias APIs – java.util, java.lang e Várias APIs – java.util, java.lang e java.lang.reflect – foram adaptadas
java.lang.reflect – foram adaptadas
para tirarem proveito do uso de
para tirarem proveito do uso de
generics
JSR 014 – Generics
public class CollectionsSample {
public class CollectionsSample {
public static void main(String[] args) {public static void main(String[] args) {
List<String> lista = new ArrayList<String>();List<String> lista = new ArrayList<String>();
lista.add("James Gosling");lista.add("James Gosling");
lista.add("Joshua Bloch");lista.add("Joshua Bloch");
//Erro de compilação//Erro de compilação
//lista.add(new Integer(0));//lista.add(new Integer(0));
String nome = lista.get(0);String nome = lista.get(0);
JSR 014 - Generics
Embora tenha benefícios, existem algumas Embora tenha benefícios, existem algumas desvantagens:
desvantagens:
• A sintaxe pode ser confusaA sintaxe pode ser confusa <? super T> getSuperClass()
• Pode ser contra-intuitivoPode ser contra-intuitivo
List<Animal> = new ArrayList<Cachorro> (); //inválida!!!!
• Não foi incluída a informação de tipo Não foi incluída a informação de tipo genérico em runtime (erasure)
JSR 160 e 174
É importante ter métricas e controle É importante ter métricas e controle
sobre a JVM em ambientes de
sobre a JVM em ambientes de
produção
produção
Este tipo de administração precisa Este tipo de administração precisa
ser feita remotamente e sem a
ser feita remotamente e sem a
necessidade de se programar
necessidade de se programar
código adicional
JSR 160 e 174
O Java possui há muito tempo uma O Java possui há muito tempo uma
API de monitoramento e
API de monitoramento e
gerenciamento, JMX (JSR 003)
gerenciamento, JMX (JSR 003) JSR 160 estendeu essa API de JSR 160 estendeu essa API de
modo que se possa acessar
modo que se possa acessar
remotamente via RMI, de forma
remotamente via RMI, de forma
padronizada, um MBeanServer em
padronizada, um MBeanServer em
outra JVM
JSR 160 e 174
JSR 174 traz uso prático de JMX JSR 174 traz uso prático de JMX
no próprio kernel da JVM
no próprio kernel da JVM
Alguns recursos monitoráveis da Alguns recursos monitoráveis da JVM a partir do Tiger são:
JVM a partir do Tiger são:
• Carregamento de classesCarregamento de classes
• Compilação JITCompilação JIT
JSR 160 e 174
Alguns recursos monitoráveis da Alguns recursos monitoráveis da
JVM a partir do Tiger são:
JVM a partir do Tiger são:
• Pools e níveis de memóriaPools e níveis de memória
• Informações básicas da máquinaInformações básicas da máquina
• Informações de execução da JVMInformações de execução da JVM
JSR 160 e 174
Permite as seguintes aplicações Permite as seguintes aplicações
práticas:
práticas:
• Monitoramento real de um ambiente Monitoramento real de um ambiente de produção
de produção
• Receber notificações quando a Receber notificações quando a memória disponível diminui
memória disponível diminui
• Extrair informações sobre contenção Extrair informações sobre contenção de threads
JSR 160 e 174
Trazem para a plataforma:Trazem para a plataforma: • Maior confiabilidadeMaior confiabilidade
• PrevisibilidadePrevisibilidade
• EstabilidadeEstabilidade
• Possibilidade de ajustes Possibilidade de ajustes
remotos por administradores de
remotos por administradores de
rede/sistemas
JSR 166 – Concurrency
Utilities
Programação com threads é Programação com threads é
complexa
complexa
Linguagem suporta somente Linguagem suporta somente
estruturas primitivas como
estruturas primitivas como
synchronized, wait(), notify() e
synchronized, wait(), notify() e
notifyAll()
notifyAll()
Necessidade de abstração de mais Necessidade de abstração de mais
alto nível
JSR 166 – Concurrency
Utilities
Define o pacote Define o pacote
java.util.concurrency e seus
java.util.concurrency e seus
subpacotes
subpacotes
Suporta construções de nível mais Suporta construções de nível mais alto como executores, semáforos,
alto como executores, semáforos,
locks, futures (resultados
locks, futures (resultados
assíncronos)
assíncronos)
Provém de API open-source de Provém de API open-source de
Doug Lea, bastante estável
JSR 175 - Metadata
O conceito de anotações é bem O conceito de anotações é bem estabelecido:
estabelecido:
• XDoclet XDoclet
• .NET.NET
A API de anotações no Tiger é uma A API de anotações no Tiger é uma das mais importantes para atingir a das mais importantes para atingir a
meta de simplicidade de meta de simplicidade de
desenvolvimento (java.lang.annotation) desenvolvimento (java.lang.annotation)
JSR 175 - Metadata
Anotações são metainformações Anotações são metainformações
ligados a classes, métodos,
ligados a classes, métodos,
campos etc. que podem ser
campos etc. que podem ser
extraídos em tempo de extraídos em tempo de compilação, carregamento de compilação, carregamento de classe ou execução classe ou execução
Podem ser usados para geração Podem ser usados para geração
de código, configuração etc.
JSR 175 – Metadata
@Documented @Documented @Retention(RUNTIME) @Retention(RUNTIME) @Target(TYPE) @Target(TYPE)public @interface SampleAnnotation {
public @interface SampleAnnotation {
}
}
@SampleAnnotation
@SampleAnnotation
public class SampleClass {
public class SampleClass {
...
... }
JSR 175 – Metadata
Várias JSRs já estão usando Várias JSRs já estão usando
metadados como parte do seu
metadados como parte do seu
modelo de implementação (JSR
modelo de implementação (JSR
220, EJB 3.0)
220, EJB 3.0)
Metadados trazem poder mas Metadados trazem poder mas
podem ser “abusados” (metadata
podem ser “abusados” (metadata
hell)
JSR 200 – Network Transfer
Format (Pack200)
Define um novo formato de Define um novo formato de
compactação, muito mais eficiente,
compactação, muito mais eficiente,
para .jars
para .jars
Garante alta taxa de compactação Garante alta taxa de compactação
(até 20% do tamanho original)
(até 20% do tamanho original) Provê API programática via Provê API programática via
java.util.Pack200
JSR 201
Responsável pela maioria das Responsável pela maioria das
mudanças da linguagem no Tiger
mudanças da linguagem no Tiger Define:Define:
• EnumEnum
• AutoboxingAutoboxing
• Enhanced for loopEnhanced for loop
• Static ImportStatic Import
JSR 201
Enums são tipos bem definidos, Enums são tipos bem definidos,
com instâncias conhecidas e
com instâncias conhecidas e
limitadas
limitadas
public enum Status {
public enum Status {
ON, OFF, BROKEN;
ON, OFF, BROKEN;
}
JSR 201
Autoboxing é o processo de Autoboxing é o processo de
conversão automático de primitivos
conversão automático de primitivos
para classes para classes Integer i = 5; Integer i = 5; int j = i + 3; int j = i + 3;
JSR 201
O enhanced for loop simplifica as O enhanced for loop simplifica as
iterações em Collections e arrays
iterações em Collections e arrays
Collection usuarios = ...;
Collection usuarios = ...;
for (Iterator i = usuarios.iterator();
for (Iterator i = usuarios.iterator();
i.hasNext(); ) {
i.hasNext(); ) {
Usuario usuario = (Usuario)i.next();Usuario usuario = (Usuario)i.next(); }
}
//no 1.5
JSR 201
Static import permite o uso de Static import permite o uso de
constantes no código sem
constantes no código sem
necessidade de prefixar com o tipo
necessidade de prefixar com o tipo
que as define
que as define
import static Status.*
import static Status.*
if (getStatus() == ON) {if (getStatus() == ON) {
//...//...
JSR 201
Varargs permite que você passe Varargs permite que você passe
diversos argumentos para um
diversos argumentos para um
método com uma sintaxe
método com uma sintaxe
simplificada:
simplificada:
public void print(Object... args) { //code }
public void print(Object... args) { //code }
print(5);
print(5);
print(“Mensagem”, “outra mensagem”, new
print(“Mensagem”, “outra mensagem”, new
Integer(3));
Integer(3));
print(“exemplo”, 4.5, null);
Outras novidades do Tiger
Class Data Sharing: as classes Class Data Sharing: as classes
principais da JVM, de 5-6 Mb, são
principais da JVM, de 5-6 Mb, são
compartilhadas e pré-preparadas
compartilhadas e pré-preparadas
Novas features para GC: algoritmo Novas features para GC: algoritmo
paralelo, comportamento
paralelo, comportamento
adaptativo etc.
adaptativo etc.
Maior precisão em medição de Maior precisão em medição de
tempo com System.nanoTime()
Outras novidades do Tiger
Novas classes e features em Novas classes e features em
java.lang e java.util: StringBuilder,
java.lang e java.util: StringBuilder,
Formatter, Scanner, Formatter, Scanner, ProcessBuilder, System.out.printf() ProcessBuilder, System.out.printf() e o retorno de System.getenv() e o retorno de System.getenv() Adição de Queue, EnumSet, Adição de Queue, EnumSet,
EnumMap e outros a java.util
EnumMap e outros a java.util API de instrumentação de API de instrumentação de
Outras novidades do Tiger
Funcionalidade de ping em Funcionalidade de ping em
InetAddress.isReachable(tempo)
InetAddress.isReachable(tempo) Suporte a mais padrões de Suporte a mais padrões de
segurança e internacionalização
segurança e internacionalização
A API de reflection sofreu grandes A API de reflection sofreu grandes
modificações para suportar as
modificações para suportar as
novas features e tirar proveito
novas features e tirar proveito
delas
Outras novidades do Tiger
RMI é capaz de gerar stubs e RMI é capaz de gerar stubs e
skeletons dinâmicos, possui factory
skeletons dinâmicos, possui factory
para uso via SSL e rmiregistry
para uso via SSL e rmiregistry
pode ser iniciado via (x)inetd
pode ser iniciado via (x)inetd AWT possui muitas bug fixes, AWT possui muitas bug fixes,
MouseInfo, always on top, novas
MouseInfo, always on top, novas
features em DnD, Clipboard,
features em DnD, Clipboard,
z-order
Outras novidades do Tiger
Dois novos L&F para o Swing: Dois novos L&F para o Swing:
Ocean and Skin
Ocean and Skin
Ainda no Swing, diversas bugfixes Ainda no Swing, diversas bugfixes e features novas, como suporte
e features novas, como suporte
especial a impressão de tabelas
especial a impressão de tabelas JFrame.add() finalmente é o JFrame.add() finalmente é o
mesmo que
mesmo que
JFrame.getContentPane().add()
Conclusão
Diversas mudanças foram feitas no Diversas mudanças foram feitas no
Tiger
Tiger
A maioria delas pode ser usada no A maioria delas pode ser usada no dia a dia do desenvolvedor de
dia a dia do desenvolvedor de
forma benéfica
forma benéfica
Algumas features podem ser mal Algumas features podem ser mal
usadas e tornar o código difícil de
usadas e tornar o código difícil de
ler, como generics e static imports