35
Java SE next Otávio Santana @otaviojava Bruno Souza @brjavaman

Javase next

Embed Size (px)

DESCRIPTION

O Java 8 certamente trouxe muitas novidades! Melhorias de código e facilidades tornando a vida do programador muito mais fácil. Mas o Java parou por ai? Quais são os próximos passos da plataforma? Conheça os próximos passos por aqueles que estão fazendo o futuro da tecnologia utilizada por milhões de pessoas.

Citation preview

Page 1: Javase next

Java SE next

Otávio Santana @otaviojava

Bruno Souza@brjavaman

Page 2: Javase next

Empresas

AMDAzul Systems, Inc.

CanonicalGoogle

IBMIntel

OracleRedHat

SAP Software Company StratusTwitter

Page 3: Javase next

Lançamento do Java 8

● Lambda● Metaspace● Stream

Page 4: Javase next

Java 9

● Build: 25● https://jdk9.java.net/download/● Java 8 mais rápido

Page 5: Javase next

Java 9

Reflections wrappers Regex Security Core0

50

100

150

200

250

Java 8 - Processo

Java 9 - Processo

Java 8 - Memória

Java 9 - Memória

Page 6: Javase next

MetaSpace

● Muito Além do Heap● Matar o PermGem● Menor responsabilidade● Código mais limpo :)

Page 7: Javase next

Melhorias na GC

● Remoções de Combinações depreciadas● Remoção de String duplicadas● Segmentos de cache de Códigos - JIT

Page 8: Javase next

Removendo Strings duplicadas

● 25% do Heap são de Strings● 13.5% String duplicadas

Heap

Outros Objetos String

String dentro do Heap

String Strings duplicadas

Page 9: Javase next

JIT

● JVM internal (non-method) code● Profiled-code● Non-profiled code

Page 10: Javase next

GC mais inteligente

● Self Tunning● Alocação agressiva● JMM Update● Smart Compilation

Page 11: Javase next

Projeto Sumatra

● Uso de GPU

Page 12: Javase next

JavaFX

● http://openjdk.java.net/projects/openjfx/●

Page 13: Javase next

Jigsaw

● Atualizado e candidato: 08/08/2014● Código, JDK modularizado

Page 14: Javase next
Page 15: Javase next

Novidades

● Leitura e escrita no JSON● Genéricos para primitivos● builders para as Coleções● Literal para coleções

Page 16: Javase next

Novidades

● List<String> list = List.of(a, b, c);● Set<String> set = Set.of(d, e, f, g);● Map<String,String> map =

Map.of(k1, V1);● List<Integer> list = #[ 1, 2, 3 ];

Page 17: Javase next

Dinheiro: Como tratar?

● Double● Float● BigDecimal● String

Page 18: Javase next

Dinheiro: Como tratar?

Código espalhado

Não padronização

Comparação

Page 19: Javase next

Dinheiro: Como tratar?

Cria o tipo Money

Centraliza formatação

Comportamento

Fica mais OO

Page 20: Javase next

Dinheiro: Como tratar?

● Padrão de Moeda● Cotação● Formatação por país● ISO 4217

Page 21: Javase next

Dinheiro: Como tratar?

Negócio Dinheiro

● Banco os tipos/formatos● Coloca no dicionário● Arredondamento● Busca a cotação

Page 22: Javase next

MoneyApi

● Controle de Dinheiro● Formatar● Arredondar● Conversão

Page 23: Javase next

MoneyApi

CurrencyUnit euro = MonetaryCurrencies.getCurrency("EUR");

Money money = Money.of(120, euro);

NumberValue number = money.getNumber();

BigDecimal value = number.numberValue(BigDecimal.class);

Page 24: Javase next

MoneyApi

CurrencyUnit euro = MonetaryCurrencies.getCurrency(Locale.GERMAN);

Money m = Money.of(120, euro);

NumberValue number = m.getNumber();

BigDecimal value = number.numberValue(BigDecimal.class);

Page 25: Javase next

MoneyApi

Money noMoney = Money.of(0, euro);

Money m1 = Money.of(10, euro);

Money m2 = Money.of(30, euro);

Money m3 = Money.of(40, euro);

List<Money> moneys = Arrays.asList(m1, m2, m3);

Money sum = moneys.stream().reduce((ma, mb) -> ma.add(m2)).orElse(noMoney);

Page 26: Javase next

MoneyApi

Money sum = Stream.of(m1, m2, m3).reduce((ma, mb) -> ma.add(m2)).orElse(noMoney);

List<Money> euros = stream.filter(m -> m.getCurrency().equals(euro)).collect(Collectors.toList());

Map<CurrencyUnit, List<Money>> mapMoney = stream.collect(Collectors.groupingBy(Money::getCurrency));

Page 27: Javase next

MoneyApi

NumberValue sum = stream.map(m -> m.getNumber()).reduce((mA, mB) -> mA.add(mB)).orElseThrow(() -> new RuntimeException("É necessário ter dinheiro"));

Map<Boolean, List<Money>> positives = stream.collect(Collectors.partitioningBy(Money::isPositive));

Page 28: Javase next

MoneyApi

MonetaryAmountFormat format = MonetaryFormats.getAmountFormat(Locale.US);

String texto = format.format(m);//12,50 USD

format = MonetaryFormats.getAmountFormat(AmountFormatQueryBuilder.create(Locale.US).set(CurrencyStyle.SYMBOL).build());

String texto = format.format(m);//$123,456.56

Page 29: Javase next

MoneyApi

ExchangeRateProvider prov = MonetaryConversions.getExchangeRateProvider("ECB");

MonetaryAmount d2e = prov.getCurrencyConversion(euro).apply(mDollar);

Page 30: Javase next

MoneyApi

ExchangeRateProvider prov = MonetaryConversions.getExchangeRateProvider("IMF");MonetaryAmount d2e = prov.getCurrencyConversion(euro).apply(mDollar);

Page 31: Javase next

Unidade de Medida

● Semelhante ao Money● Padronizar unidades de Medidas● Formatar● Operações

Page 32: Javase next

Unidade de Medida

QuantityFactory<Mass> instance = QuantityFactory.getInstance(Mass.class);

Quantity<Mass> m = instance.create(10, KILOGRAM);

Page 33: Javase next

Unidade de Medida

QuantityFactory<Time> timeFactory = QuantityFactory.getInstance(Time.class);

Quantity<Time> m1 = timeFactory.create(40, MINUTE);

Quantity<Time> m2 = timeFactory.create(20, MINUTE);

Quantity<Time> h1 = m1.add(m2).to(HOUR);

Page 34: Javase next

Unidade de Medida

● Acceleration ● Length● Angle● Area● Mass● Power

● Energy● Speed● Force● Temperature● Time● Information● Volume

E muito mais! No total de 52 medidas

Page 35: Javase next

Obrigado

Otávio Santana @otaviojava

Bruno Souza@brjavaman