55 New Things in Java 7 - Brazil
-
Upload
stephen-chin -
Category
Technology
-
view
6.775 -
download
1
description
Transcript of 55 New Things in Java 7 - Brazil
11
55 Funcionalidades Do Java 7
Translation By:Marcelo Quinta @mrquinta
Stephen ChinJava Evangelist, [email protected]
tweet: @steveonjava
22
As 55 funcionalidades do Java 7 que você (provavelmete) nunca ouviu falar
• 55 minutos – 55 slides• Ignite Format
• Sem parar!• Sem voltar atrás• Perguntas? Tudo bem, mas somente se ainda sobrar tempo
nesse slide (caso contrário, deixe para mais tarde)• A especificação de requisitos do Java 7 tem mais de 2000
mudanças. Temos aqui 55 das mais relevantes…
33
Literais binários
• Literais binários
int mascara = 0b101010101010;aShort = (short)0b1010000101000101;long aLong = 0b1010000101000101101000010100010110100001010001011010000101000101L;
CARA_FELIZ = { (short)0b0000011111100000; (short)0b0000100000010000; (short)0b0001000000001000; (short)0b0010000000000100; (short)0b0100000000000010; (short)0b1000011001100001; (short)0b1000011001100001; (short)0b1000000000000001; (short)0b1000000000000001; (short)0b1001000000001001; (short)0b1000100000010001; (short)0b0100011111100010; (short)0b0010000000000100; (short)0b0001000000001000; (short)0b0000100000010000; (short)0b0000011111100000; }
44
“Underline” em literais numéricos
• Válido:
• Inválido:
int mascara = 0b1010_1010_1010;long grandao = 9_223_783_036_967_937L;long numeroDoCartao = 1234_5678_9012_3456L;long cadastroNoSUS = 999_99_9999L;float pi = 3.14_15F;Long bytesHex = 0xFF_EC_DE_5E;long palavrasHex = 0xCAFE_BFFE;
float pi1 = 3_.1415F; float pi2 = 3._1415F;long nSUS = 999_99_9999_L;int x1 = _52; int x1 = 52_;int x2 = 0_x52; int x2 = 0x_52;
55
Strings na condição do switch
int nomeDoMesParaDias(String s, int ano) { switch(s) { case "Abril": case "Junho": case "Setembro": case "Novembro": return 30;
case "Janeiro": case "Março": case "Maio": case "Julho": case "Agosto": case "Dezembro": return 31;
case "Fevereiro”: ... default: ...
Você sabia que isso geralmente produz byte codes mais eficientes do que uma instrução if-then-else? Case sensitive!
66
Gerenciamento automático de recursos
try (InputStream in = new FileInputStream(src), OutputStream out = new FileOutputStream(dest)){ byte[] buf = new byte[8192]; int n; while (n = in.read(buf)) >= 0) out.write(buf, 0, n);}
• Nova superinterface java.lang.AutoCloseable• Todos AutoCloseable (throws Exception) e tipos que estendem
java.io.Closeable (throws IOException) são utilizáveis com “try-with-resources”
• Qualquer um que tenha void close() é um candidato• JDBC 4.1 também foi adaptada como AutoCloseable
77
Exceções suprimidas
java.io.IOException
at Suppress.write(Suppress.java:19)
at Suppress.main(Suppress.java:8)
Suppressed: java.io.IOException
at Suppress.close(Suppress.java:24)
at Suppress.main(Suppress.java:9)
Suppressed: java.io.IOException
at Suppress.close(Suppress.java:24)
at Suppress.main(Suppress.java:9)
Throwable.getSuppressed(); // Returns Throwable[]
Throwable.addSuppressed(aThrowable);
88
Catch múltiplo
try {...
} catch (ClassCastException e) { facaAlgoInteligente(e); throw e;} catch(InstantiationException |
NoSuchMethodException |InvocationTargetException e) {
// Útil se você realizar ações genéricas log(e);
throw e;}
99
Rethrow mais preciso
public void foo(String bar) throws FirstException, SecondException { try { // Código que pode lançar tanto
// FirstException como SecondException } catch (Exception e) { throw e; } }
• Antes do Java 7, esse código não compilaria. As exceções do throws deveriam corresponder aos tipos das capturas – foo deveria ter um “throws Exception”• Java 7 adiciona o suporte para isso contanto que o bloco do try chame todas as exceções da cláusula throws e que a variável na cláusula do catch seja relançada e as exceções não sejam pegas por outro catch
1010
O “Operador diamante” funciona de várias formas…
• O compilador infere o tipo à partir do diamante (<>)
List<String> listaStr = new ArrayList<>();
OU
List<Map<String, List<String>> strList = new ArrayList<>();
OU
Foo<Bar> foo = new Foo<>();foo.mergeFoo(new Foo<>());
1111
Warnings dos argumentos– Rasuraclass Test { public static void main(String... args) { List<List<String>> monthsInTwoLanguages = Arrays.asList(Arrays.asList("January", "February"), Arrays.asList("Gennaio", "Febbraio" )); }} Test.java:7: warning:
[unchecked] unchecked generic array creation for varargs parameter of type List<String>[] Arrays.asList(Arrays.asList("January", ^1 warning
@SuppressWarnings(value = “unchecked”) // at call@SafeVarargs // at declaration
1212
Funcionalidades do Java NIO.2 -Tipos auxiliares
Três importantes tipos auxiliares no Java 7• Classe java.nio.file.Files
• Métodos exclusivamente estáticos para trabalhar com arquivos, diretórios e outros tipos de registros
• Classe java.nio.file.Paths• Métodos exclusivamente estáticos para retornar um Path através da
conversão de String ou um URI (Uniform Resource Identifier)
• Interface java.nio.file.Path• Usada para objetos que representam a localização de um arquivo no
sistema de arquivos, normalmente dependente do sistema.
Caso de uso típico:Usar a Paths para pegar um Path. Usar a Files para fazer algo com um arquivo.
1313
Exemplo prático dos ajudantes do Java NIO.2 • Cópia de arquivo realmente fácil– Com ajuste fino
• Movimentação do arquivo é suportada– Movimento atômico opcional é suportado
Path src = Paths.get(“/home/fred/readme.txt”);Path dst = Paths.get(“/home/fred/copy_readme.txt”);
Files.copy(src, dst,StandardCopyOption.COPY_ATTRIBUTES,StandardCopyOption.REPLACE_EXISTING);
Path src = Paths.get(“/home/fred/readme.txt”);Path dst = Paths.get(“/home/fred/readme.1st”);
Files.move(src, dst, StandardCopyOption.ATOMIC_MOVE);
1414
Funcionalidade do Java NIO.2 –Classe Files
• Classe ajudante Files é uma ótima ferramenta para:• Copiar• Criar Diretórios• Criar arquivos• Criar Links• Usar a pasta temporária do sistema• Deletar• Atributos – Modificados/Proprietário/Permissões/Tamanho, etc.• Leitura/Escrita
1515
Pastas com Java NIO.2
• DirectoryStream itera sobre entradas– Escala para pastas grandes– Usa menos recursos– Diminui o tempo de resposta para sistemas de arquivos remotos– Implementa Iterable e Closeable para prover produtividade
• Suporte a filtragem– Suporte embutido para glob, expressões regulares e filtros
personalizados.
Path srcPath = Paths.get(“/home/fred/src”);
try (DirectoryStream<Path> dir = srcPath.newDirectoryStream(“*.java”)) {
for (Path file : dir)System.out.println(file.getName());
}
1616
Links simbólicos com Java NIO.2• Path e Files são“conscientes dos links”
Path novoLink = Paths.get(. . .);Path arquivoExistente = Paths.get(. . .);try { Files.createLink(novoLink, arquivoExistente);} catch (IOException x) { System.err.println(x);} catch (UnsupportedOperationException x) { //Alguns sistemas de arquivos ou configurações
//podem não suportar links System.err.println(x);}
1717
Caminhando na árvore de arquivos com Java NIO.2
• A interface FileVisitor faz a caminhada sobre a árvore de arquivos para pesquisa ou outras atividades ser trivial
• SimpleFileVisitor implementa
preVisitDirectory(T dir, BasicFileAttributes attrs);visitFile(T dir, BasicFileAttributes attrs);visitFileFailed(T dir, IOException exc);postVisitDirectory(T dir, IOException exc);
AMOSTRA:Path diretorioInicial = ...;PrintFiles pf = new PrintFiles(); // SimpleFileVisitor sub
// visitFile(Path p, BasicFileAttributes bfa) {// System.out.println(file.getFileName());}
Files.walkFileTree(diretorioInicial, pf);
1818
Vigiando um diretório com Java NIO.2
• Crie um observador WatchService para o sistema de arquivos
• Registre um diretório para o observador• “Observador” pode ser consultado ou esperar por
eventos• Eventos criados na forma de chaves (Keys)• Recuperar a chave (Key) de um Watcher• A chave tem o nome do arquivo e os eventos dentro dela
para adicionar/remover/atualizar• Capacidade de detecção de
estouro de eventos
1919
Sistemas de arquivos personalizados com o NIO.2
• Classe FileSystems é factory para os ótimos FileSystem (interface)
• Java 7 permite o desenvolvimento de FileSystems personalizados, por exemplo:• Baseados em memória ou zip• Distribuídos e tolerantes a falhas• Substitutos ou suplementares ao provedor de sistemas de
arquivos padrão
• Dois passos:• Implementar java.nio.file.spi.FileSystemProvider
• URI, Caching,Manipulação de arquivos, etc.• Implementar java.nio.file.FileSystem
• Roots, acesso de leitura e escrita, gravação de arquivos, etc.
2020
Provedor de sistema de arquivos NIO.2 para arquivos zip/jar
Um provedor de sistemas de arquivos totalmente funcional e suportado no NIO.2 para arquivos zip e jar
Map<String, String> env = new HashMap<>();
env.put("create", "true");
// locate file system by using the syntax
// defined in java.net.JarURLConnection
URI u= URI.create("jar:file:/foo/zipfs/zipfstest.zip");
try (FileSystem z = FileSystems.newFileSystem(u, env)) {
Path externalTxtFile = Paths.get("/foo/zipfs/Sample.txt");
Path pathInZipfile = z.getPath("/Sample.txt");
// copy a file into the zip file
externalTxtFile.copyTo(pathInZipfile);
}
2121
APIs de Concorrência JSR 166y - Phasers
• Phaser• Barreira similar ao CyclicBarrier e CountDownLatch• Usado por muitas threads para esperar por em ponto comum
• Por exemplo, uso para criar N Threads que você queira que faça simultaneamente algo comum – metáfora do “tiro de largada”
• Como o Phaser é um melhoramento?• Adição/remoção dinâmico de Dynamic add/remove de partes
para serem sincronizadas• Melhor prevenção de deadlocks• Contagem de chegada e opções de avanço de fase,etc• APIs para conclusão• Hierarquização (Estrutura de árvore)
• Melhor que sincronizar 100 threads sincronizar 2x50
2222
APIs de Concorrência JSR 166y - TransferQueue
• Interface TransferQueue• Extension para BlockingQueue• Implementada por LinkedTransferQueue• Benefícios adicionais:
• Adiciona métodos:• transfer(E e), tryTransfer(E e), tryTransfer(E e, long timeout), hadWaitingConsumer(), getWaitingConsumerCount()
• Permite que filas mais inteligentes sejam construídas – avança a estrutura de dados se é conhecido que há consumidores esperando
2323
Fork Join Framework - JSR 166y - Pools
• ForkJoinPool– Service para rodar ForkJoinTasks– aFjp.execute(aTask); // asincr– aFjp.invoke(aTask); // esperar– aFjp.submit(aTask); // async + future
– ForkJoinPool(); // padrão para platform– ForkJoinPool(int n); // # threads concorrentes– ForJoinPool(n,aThreadFactory,exHandler,FIFOtasks); // Crie seu próprio manipulador de threads, manipulador de exceções, e boolean na tarefa de ordenação (por padrão, LIFO)
2424
Fork Join Framework - JSR 166y - Tasks
• ForkJoinTask– A classe abstrata base para:• RecursiveAction
– Uma tarefa recursiva resultless– Implementa método abstrato compute() para cálculos
• RecursiveTask– Similar ao RecursiveAction,
mas retorna um resultado
ForkJoinPool p = new ForkJoinPool(); MyTask mt = new MyTask(n); // implementA compute p.submit(mt);while (!mt.isDone()) {/*MENTIRA!*/ }System.out.println(mt.get());
2525
Fork Join Framework - JSR 166y - compute()
• Exemplo de RecursiveAction para incrementar um arrayprotected void compute() {
if (hi - lo < THRESHOLD) {
for (int i = lo; i < hi; ++i) array[i]++; } else {
int mid = (lo + hi) >>> 1;
invokeAll(new IncrementTask(array, lo, mid),
new IncrementTask(array, mid, hi));}
• Exemplo de RecursiveTask example para a sequência de FIbonacciprotected Integer compute() {
if (n <= 1) return n;
Fibonacci f1 = new Fibonacci(n - 1);
Fibonacci f2 = new Fibonacci(n - 2);
f1.fork(); f1.fork();
return f2.join() + f1.join();}
2626
Números randômicos concorrentes - JSR 166y
• Criação de números aleatórios existente torna-se fonte inconsitente de contenção entre threads em aplicativos simultâneos
• Esperados melhoramentos de RNG concorrentes com o advento do Fork Join Framework
• Classe java.util.ThreadLocalRandom• ThreadLocalRandom.current().nextDouble(…)• ThreadLocalRandom.current().nextInt (…)• ThreadLocalRandom.current().nextLong(…)
2727
JSR 166y – Classe ConcurrentLinkedDeque
• Filas duplamente ligadas baseadas em nós• Como uma Queue, mas permite a remoção de elementos
da frente e de trás
• Inserção concorrente, remove e acessa em múltiplas threads
• Iterators são fracamente consistentes
2828
Melhoramento no ClassLoader – prevenção de Deadlock
Hierarquia de classes:
class A extends B ; class C extends D ;
Classloader personalizado CL1:
Carrega diretamente a classe A
delega ao ClassLoader personalizado CL2 p/ classe B
Classloader personalizado CL2:
Carrega diretamente a classe C
delega ao ClassLoader personalizado CL1 p/ classe D
Thread 1:
Usa CL1 para carregar a classe A (trava CL1)
defineClass A inicia loadClass B (tenta travar CL2)
Thread 2:
Usa CL2 para carregar a classe C (trava CL2)
defineClass C inicia loadClass D (tenta travar CL1)
ClassLoaders não eram “suficientemente
granulares”e propensos a
deadlock
Java 7 tem um “classloader paralelo”
(in SE 7 – lock CL1+A)
(in SE7 – lock CL2+B)
(in SE 7 – lock CL2+C)
(in SE7 – lock CL1+D)
2929
Melhoramentos no URLClassLoader– close()// Criar um classLoader a partir do "foo.jar"
URL url = new URL("file:foo.jar");
URLClassLoader loader = new URLClassLoader (new URL[] {url});
Class cl = Class.forName ("Foo", true, loader);
Runnable foo = (Runnable) cl.newInstance();
foo.run();
loader.close ();
// foo.jar é atualizado de alguma forma
loader = new URLClassLoader (new URL[] {url});
cl = Class.forName ("Foo", true, loader);
foo = (Runnable) cl.newInstance();
// Executa a nova implementação de Foo
foo.run();
3030
Unicode 4 -> Unicode 6.0
• Unicode é originalmente de 16 bit• 16 bits não é o suficiente para o Unicode 6, mas a
retrocompatibilidade deve ser mantida• Usar String “U+hex” para expressar caracter em Unicode • Unicode 6.0 adiciona milhares de caracteres• Suporte para propriedade e arquivos de dados (interessante
principalmente para glifos japoneses e scripts indi)• Suporte completo a expressões regulares com Unicode 6.0!
3131
Códigos de moeda extensível (ISO 4217)
• ISO 4217 define códigos de moedas• Possibilidade de substituir a moeda padrão no arquivo <JAVA_HOME>/lib/currency.properties permite apoiar mudanças globais sem atualizar o Java
• Formato: Código do país ISO 3166 = Código da ISO 4217
# Exemplo do canada adotando dólar americano
# CA=CAD,124,2 é o código padrão da ISO 4217
CA=USD,840,2
3232
Melhorias no Number Shaper• NumericShaper usado para mapear números para codificações não-
Latin (desde o 1.4)
• NumericShaper tradicionalmente usado como uma máscara de bits inteiros para o padrão• Bom quando havia somente 19 padrões
• No Java 7 temos 34 (> 32 bits!!)
• Java 7 agora tem Enum NumericShaper.Range
• Retrocompatibilidade mantida, novas APIs adicionadas para o uso de Enum quando solicitado
3333
Melhoramento do Locale – Categorias
• Locale padrão pode ser modificado independentemente para formato de recursos (datas, números, moedas) e recursos de tela (menus e caixas de diálogo)
• Pode exemplo, uma aplicação para público japonês que lidam com transações financeiras dos EUA pode:
//Enum Locale.Category – DISPLAY e FORMATO//Padrão sem arg get/set é DISPLAYLocale.setDefault(DISPLAY, Locale.JAPAN);Locale.setDefault(FORMAT, Locale.US);
3434
Melhoramento do Locale– BCP 47 Extensions• Java 7 confirms a IETF BCP 47 (ref UTS #35)
• Especifica as extensões de uma Locale (get/set)• Ex: de-DE-co-phonebk• Nenhuma garantia que a plataforma realmente estará
nessa extensão
Chave Descrição Exemplo Descrição do exemplo
cacalendar algorithm
ca-buddhist Calendário budista tailandês
co agrupamento co-pinyin Ordenação Pinyin para o Latino
k* parametros do agrupamento
kf-upper Donald antes do donald
cu Tipo da moeda cu-usd Dólar americano
nu Padrão numérico nu-jpanfin Números financeiros japoneses
tz Fuso tz-aldav Europa/Andorra
vaTipo de variante comum
va-posix Estilo de localidade POSIX
3535
Look and Feel Nimbus
• Look-and-feel multiplataforma melhor que o Metal;• Introduzido no Java SE 6u10, agora parte do Swing• Não é o L&F padrão• Implementação escalável Java 2D• Scalable Java 2D impl
3636
Componente JlayerFácil enriquecimento de componentes Swing
//Coloque seu componente dentro de um JLayerJLayer<JPanel> layer = new JLayer<JPanel>(panel);//Interface customizada provê todas funcionalidades extraslayer.setUI(myLayerUI);// adicionar a interface como um componente comumframe.add(layer);
3737
Mistura de AWT e Swing – Funciona*
• Na 6u12 e 7u1, há algumas ressalvas para barras de rolagem
3838
Janelas translúcidas
• API privada adicionada na 6u10, agora público no Java 7• Suporte (baseado na plataforma) para:
• Translucidez uniforme;• Translucidez por pixel• Transparência por pixel
// Uniforme e simples:
aWindow.setOpacity(0.5f);
// Por pixel g2d é a g2d de um Jpanel sobre o paintComponent(g)
Paint p = new GradientPaint(0.0f, 0.0f, new Color(R, G, B,0), 0.0f, getHeight(), new Color(R, G, B, 255), true);
g2d.setPaint(p);
g2d.fillRect(0, 0, getWidth(), getHeight());
3939
Renderização Java 2D baseada no Xrender para o X11 moderno
• Performance gráfica melhorada.• Desligada por padrão (compatibilidade com versões
anteriores)
• Tranquilo:
-Dsun.java2d.xrender=true
• Verboso (log na saída padrão para sucesso ou fracasso)
-Dsun.java2d.xrender=True
4040
Fontes OpenType/CFF
• Plataforma Java precisa suportar fontes TrueType, outras tecnologias de fonte são dependentes de implementação
• Java 7 adiciona suporte para “Compact Font Format” - OpenType/CFF.
4141
Melhor suporte para as fontes do Linux
• Cinco fontes desde o Java 1.0:• Serif, Sans-serif, Monospaced, Dialog e
DialogInput• Deve mapear a fonte física no seu sistema
• Sem consistência em fontes no Linux• É necessário editar fontconfig.properties• Java 7 no Linux (e Solaris 11) usa a
“libfontconfig” do sistema, refletindo o que as aplicações Desktop Gnome/KDE utilizam
4242
Abas HSV/HSL na classe JColorChooser
4343
JDBC 4.1• “Try-with-resources” automaticamente fecha recursos dos tipos
Connection, ResultSet e Statement
try (Statement stmt = con.createStatement()) { // ... }
• RowSet 1.1 introduz RowSetFactory e RowSetProvider
/*Factory com opções determinadas na linha de comando ou metainf */
myRowSetFactory = RowSetProvider.newFactory();
jdbcRs = myRowSetFactory.createJdbcRowSet();
jdbcRs.setUrl("jdbc:myDriver:myAttribute"); //etc
jdbcRs.setCommand("select CAF_NAME, SUP_ID, PRECO, VENDAS, TOTAL from CAFES");
jdbcRs.execute();
4444
Java DB Enhancements (Derby)
• JDK 7 inclui Java DB 10.8.1.2• Novidades desde o JDK 6
• Tipo de dados BOOLEAN • Truncamento de tabelas• Navegação em Query plans
• Cálculo automático das estatísticas dos índices • Nomes de banco de dados em Unicode• Tratamento de interrupções melhorado
• Agora pode interromper threads de conexão• Otimização MAX (Mais rápido!)
4545
Incorporação do arquivo JNLP na tag do Applet
• Economiza uma requisição na rede quando o applet é carregado na primeira vez
• Base64 codifica o conteúdo do JNLP em uma chamada Javascript:
<script src="http://www.java.com/js/deployJava.js"></script>
<script>
var attributes = {} ;
<!-- Base64 encoded string trunc’d below for readability --> var parameters = {jnlp_href: 'dynamictree-applet.jnlp',
jnlp_embedded: 'PCEtLSAKLyoKICogQ29weX ... HA+Cg==' } ; deployJava.runApplet(attributes, parameters, '1.7');
</script>
4646
<script>
function registerAppletStateHandler() {
switch (drawApplet.status) {
case 1: <!–- applet is loading -->
drawApplet.onLoad = onLoadHandler;
case 2: <!–- applet is loaded -->
case 3: <!–- error -->
document.getElementById("mydiv")
.innerHTML =“No need to onload";
}
}
Capacidade de detectar o estado de inicialização de um applet no seu carregamento
<!–- assume java.com/js/deployJava.js is loaded ->
var parameters = {java_status_events: 'true'};
<!–- set other params like jnlp->
deployJava.runApplet(attributes, parameters, '1.7');
...
</script>
function onLoadHandler(){
document.
getElementById("mydiv“)
.innerHTML =
"Applet has loaded";
draw();
}
4747
“Decoração arrastável” do Applet
• Aspectos gráficos do Applet se aplicam igualitariamente nas execuções dentro e fora do browser – sem bordas, etc.
4848
Outra variedade de coisas do JNLP que são novidades…
• JNLP parcialmente assinado• Simplifica o build e implantação em alguns cenários• Arquivo JNLP externo pode diferir de um • Arquivo JNLP externo pode diferir de um recurso embutido
no jar
• Direcionamento de recursos para uma versão de SO<resources os="Windows\ Vista Windows\ 7"> <jar href=“legacySound.jar"/> </resources>
• Melhores “preferências de instalação de aplicações• Por exemplo, atributo para determinar se a aplicação
aparecerá no painel de “Adicionar ou remover programas”
4949
Máquina virtual: Atualização para um GC experimental – G1
• Garbage First - “G1” destinado a substituir* Concurrent Mark-Sweep (CMS) na Hotspot em um release próximo
• G1 está incluído para experimentação no Java 7• Principais benefícios:
• Mais previsibilidade “soft real-time” – configuração temporal• Alta taxa de transferência (Throughput);
• Básico:• Heap particionado em regiões de mesmo tamanho• Compacto como procede – olha para regiões sem objetos
alocados para recuperação imediata
*não é uma declaração oficial para o futuro
5050
VM: Compilação em camadas
• Hotspot tem 2 “cliente” and “servidor” do JIT• Cliente inicia rapidamente, mas deixa algumas otimizações
– melhor para clientes• Servidor• Servidor inicia mais devagar, mas provê melhores
otimizações• Java 7 adiciona Compilação em camadas• Trabalhe com JIT primeiro no cliente e, se tivercom bom
código, recompile com o servidor• Estava aí já há algum tempo,mas sem uma boa
implementação
-server -XX:+TieredCompilationImagem de Rémi Forax showing the DaCapo Jython benchmark.
http://www.java.net/blogs/forax
5151
VM: OOPS Comprimida por padrão
• A ida de sistemas 32bit para 64bit vai aumentar o heap em ~1.5x simplesmente por causa de maiores ponteiros de objetos
• Memória é barata, mas largura de banda e cache não• OOPS comprimida:
• Ponteiros gerenciados de 32 bits (tamanho de heap similar para aplicações 32/64 bit)
• Scaled (8 x 4GB pedações) adicionados a base
64 bit
• Útil para heaps maiores que 32 GB• Compressed OOPS vai ser desligado quando
–Xmx > 32g
5252
VM: invokedynamic ilustradathis[method_name](x, y)
invokedynamic [#bootstrapMethod] .this_method_name
class LangaugeRuntime {bootstrapMethod(info) {
...return new CallSite();
}
class AClass {aMethod(x, y) {
...}
CallSite
MethodHandle
1. Invoca bootstrap
2. ProduzCallSite
3. Linkagem completa
4. Invoca a implementação do
códigio
5353
Melhoramentos na tecnologia Java XML
• JAXP 1.4.5• Resoluções de bug e melhoramentos de performance
• JAX-WS 2.2.4• Resoluções de bug e melhoramentos de performance
• JAXB 2.2.3• Resoluções de bug e melhoramentos de performance
5454
Elliptic Curve Cryptography (ECC)
• Novo provider nativo adicionado ao JDK7• Algoritmos baseados no ECC (ECDSA/ECDH)• Permite extensão de Java Secure Sockets Extension
(JSSE)baseados no ECC• Comparado a criptografia tradicional, sistemas como
RSA, ECC oferecem segurança equivalente:• Com tamanhos menores• Com tamanhos de chave menores• Computacões mais rápidas• Pouco poder de consumo• Economia de memória e banda
5555
Atualizações no Transport Layer Security (TLS)
• Suporte ao TLS 1.1• Proteção contra ataques encadeados
• Suporte a TLS 1.2• Renegociação TLS• CertPath e TLS algorithm incapacitante
• Pode negar algoritmos específicos no processamento de caminho e handshaking
5656
Melhoramentos do JavaDoc no Java 7
• Section 508 com guia de acessibilidade• Legendas, títulos,etc
• Anteriormente, Javadoc era escrito em um OuputStream ao mesmo tempo que o documento era construído sequencialmente, impondo limitações
• Agora usa classes internas da “HTMLTree”• Gera código em conformidade com HTML• Permite mais avanços no futuro
• Remove limitações de só ser capaz de executar uma vez em qualquer máquina virtual• Era bom quando executado como uma ferramenta de linha de
comando• Integração contínua,etc, gerou a necessidade de se preocupar com
isso
5757
CSS para JavaDoc - stylesheet.css
5858
The preceding is intended to outline our general product direction. It is intended for information purposes only, and may not be incorporated into any contract. It is not a commitment to deliver any material, code, or functionality, and should not be relied upon in making purchasing decisions.The development, release, and timing of any features or functionality described for Oracle’s products remains at the sole discretion of Oracle.
5959
59
Stephen [email protected]: @steveonjava
Obrigado!
Desconto especial de 40% para o JustJava. Entre em apress.com e digite o código PJVF73