java se next generetion
DESCRIPTION
The next generation of Java SE in OpenJDK project, presented in JavaOne 2014.TRANSCRIPT
- 1. Java SE next Otvio Santana @otaviojava
- 2. OpenJDK Java 7 Java 8 Java 9
- 3. OpenJDK hg clone http://hg.openjdk.java.net/jdk9/jdk9 jdk_1_9 sh ./get_source.sh ./configure make install
- 4. OpenJDK Java 8 Java 9 Compiler GC Corelibs Sumatra JavaFX
- 5. Companies AMD Apple Azul Systems, Inc. Canonical Google IBM Intel Oracle RedHat SAP Software Company Stratus Twitter
- 6. Launched the Java 8 Lambda Metaspace Stream
- 7. Java 9 Build: 31 https://jdk9.java.net/download/ Java 8 faster
- 8. Java 9 Reflections wrappers Regex Security Core 250 200 150 100 50 0 Java 8 - Process Java 9 -Process Java 8 - Memory Java 9 -Memory
- 9. Improvements in GC Remove GC combinations deprecated Strings Deduplication Segmented Code Cache Shenandoah
- 10. Strings duplication 75 25 Heap Another objects String 25% of Heap are Strings 13.5% String duplicates String inside Heap 85 15 String Strings duplicates
- 11. Segmented Code Cache JVM internal (non-method) code Profiled-code Non-profiled code
- 12. Sumatra and OpenJFX Use of GPU JavaFX inside OpenJDK
- 13. Jigsaw Updated at: 18/08/2014 The source, JDK modularized
- 14. News to coders Light Write and read to JSON Generics to primitives builders to Collections Literal to Collections Process API Updates Smart Java Compilation http 2.0 client
- 15. News List list = List.of(a, b, c); Set set = Set.of(d, e, f, g); Map map = Map.of(k1, V1);//not collection List list = #[ 1, 2, 3 ];
- 16. Money Api Take care of money to you :) Formating Rounding Exchange Rate
- 17. Money Api CurrencyUnit euro = MonetaryCurrencies.getCurrency("EUR"); MonetaryAmount money = Money.of(120, euro); NumberValue number = money.getNumber(); BigDecimal value = number.numberValue(BigDecimal.class);
- 18. Money Api CurrencyUnit dollar = MonetaryCurrencies.getCurrency(Locale.US); MonetaryAmount m = Money.of(120, dollar); NumberValue number = m.getNumber(); BigDecimal value = number.numberValue(BigDecimal.class);
- 19. Money Api MonetaryAmountFormat format = MonetaryFormats.getAmountFormat(Locale.US); String text = format.format(m);//12,50 USD format = MonetaryFormats.getAmountFormat(AmountFormatQueryBuild er.create(Locale.US).set(CurrencyStyle.SYMBOL).build()); String text = format.format(m);//$123,456.56
- 20. Money Api MonetaryAmount noMoney = Money.of(0, euro); MonetaryAmount m1 = Money.of(10, euro); MonetaryAmount m2 = Money.of(30, euro); MonetaryAmount m3 = Money.of(40, euro); List moneys = Arrays.asList(m1, m2, m3); MonetaryAmount sum = moneys.stream().reduce(MonetaryFunctions.sum()).orElse(noM oney);
- 21. Welcome Lambda List justDollar = moneys.stream() .filter((MonetaryFunctions.isCurrency(DOLLAR))) .collect(Collectors.toList()); List notEuro = moneys.stream().filter((MonetaryFunctions.isNotCurrenc y(EURO))).collect(Collectors.toList());
- 22. Welcome Lambda MonetaryFunctions.isCurrency(DOLLAR).and(Monetary Functions.isBetween(min, max))); MonetaryFunctions.containsCurrencies(EURO, DOLLAR)).or(MonetaryFunctions.isGreaterThan(money )));
- 23. Welcome Lambda List orderCurrencyValue = moneys.stream().sorted(MonetaryFunctions.sortCurrenc yUnit().thenComparing(MonetaryFunctions.sortNumber ())).collect(Collectors.toList()); List orderHighValue = moneys.stream().sorted(MonetaryFunctions.sortCurrenc yUnit().thenComparing( MonetaryFunctions.sortCurrencyUnitDesc())) .collect(Collectors.toList());
- 24. Welcome Lambda Map> groupBy = moneys.stream().collect(MonetaryFunctions.groupByCu rrencyUnit());
- 25. Welcome Lambda MonetarySummaryStatistics summary = getCurrencies().stream().collect(MonetaryFunctions.sum marizingMonetary(DOLLAR)); GroupMonetarySummaryStatistics groupSummary = getCurrencies().stream().collect(MonetaryFunctions.gro upBySummarizingMonetary());
- 26. Welcome Lambda MonetarySummaryStatistics summary = ... MonetaryAmount min = summary.getMin(); MonetaryAmount max = summary.getMax(); MonetaryAmount sum = summary.getSum(); MonetaryAmount avarage = summary.getAverage(); Long count = summary.getCount();
- 27. Welcome Lambda GroupMonetarySummaryStatistics groupSummary =... Map map = groupSummary.get(); MonetarySummaryStatistics summaryDollar = map.get(DOLLAR);
- 28. Exchange Rate MonetaryAmount m1 = Money.of(10, euro); MonetaryAmount m2 = Money.of(30, dollar); m1.add(m2); throw MonetaryException (Currency mismatch...
- 29. Exchange Rate ExchangeRateProvider provider = MonetaryConversions.getExchangeRateProvider("ECB"); MonetaryAmount d2e = provider.getCurrencyConversion(euro).apply(mDollar);
- 30. Exchange Rate ExchangeRateProvider provider = MonetaryConversions.getExchangeRateProvider("IMF"); MonetaryAmount d2e = provider.getCurrencyConversion(euro).apply(mDollar);
- 31. Exchange Rate List orderCurrencyValue = moneys.stream().sorted(MonetaryFunctions.sortExcha nge(provider).collect(Collectors.toList()); 9 BRL 8 USD 7 EUR Because: 1 USD = 2.4203 BRL 1 USD = 2.4203 BRL 1 USD = 0.79 EUR 7 EUR 9 BRL 8 USD
- 32. Exchange Rate MonetaryAmount sum = moneys.stream().reduce(MonetafyFunctions.sum(provider , DOLLAR)).orElse(noMoney); MonetaryAmount min = moneys.stream().reduce(MonetafyFunctions.min(provider )).orElse(noMoney); MonetaryAmount max = moneys.stream().reduce(MonetafyFunctions.max(provide r)).orElse(noMoney);
- 33. Exchange Rate MonetarySummaryStatistics summary = getCurrencies().stream().collect(MonetaryFunctions.sum marizingMonetary(DOLLAR, provider));
- 34. Measurement API Work with Measure Standardize measure unit Format Operations (convert, add, subtract)
- 35. Measurement API QuantityFactory massFactory = QuantityFactoryProvider.getQuantityFactory(Mass.class); Quantity tenKilogram = massFactory.create(10, SI.KILOGRAM);
- 36. Measurement API QuantityFactory timeFactory = QuantityFactory.getInstance(Time.class); Quantity m1 = timeFactory.create(40, MINUTE); Quantity m2 = timeFactory.create(20, MINUTE); Quantity h1 = m1.add(m2).to(HOUR); //1 hour
- 37. Measurement API QuantityFactory timeFactory = QuantityFactory.getInstance(Time.class); Quantity m1 = timeFactory.create(1, DAY); Quantity m2 = timeFactory.create(12, HOUR); Quantity result = m1.add(m2); //1.5 day
- 38. Measurement API Quantity minutes = Quantities.getQuantity(15, SI.MINUTE); Quantity hours = Quantities.getQuantity(18, SI.HOUR); Quantity day = Quantities.getQuantity(1, SI.DAY); Quantity seconds = Quantities.getQuantity(100, SI.SECOND); List> times = new ArrayList(); times.addAll(Arrays.asList(minutes, hours, day, seconds));
- 39. Measurement API List> sortNaturalList = times.stream() .sorted(QuantityFunctions.sortNatural()) .collect(Collectors.toList()); seconds - 100 seconds minutes - 15 minutes hours - 18 hours day - 1 day
- 40. Measurement API List> sortNaturalList = times.stream() .sorted(QuantityFunctions.sortNaturalDesc()) .collect(Collectors.toList()); day - 1 day hours - 18 hours minutes - 15 minutes seconds - 100 seconds
- 41. Measurement API times.add(Quantities.getQuantity(24, SI.HOUR)); Comparator> sortNatural = QuantityFunctions.sortNatural(); Comparator> sortSymbol = QuantityFunctions.sortSymbol(); List> sortNaturaAndSymbolList = times.stream() .sorted(sortNatural.thenComparing(sortSymbol)) .collect(Collectors.toList()); seconds - 100 seconds minutes - 15 minutes hours - 18 hours day - 1 day dayInHour 24 hours
- 42. Measurement API List> greaterThanOneDay = times .stream() .filter(QuantityFunctions.isGreaterThan(oneDay)).collect(Collect ors.toList()); List> greaterThanOneDay = times .stream().filter(QuantityFunctions.isBetween(oneHour, oneDay)).collect(Collectors.toList());
- 43. Measurement API Mixing Filters QuantityFunctions.isGreaterThan(oneDay).and(QuantityFunctio ns.fiterByUnit(SI.HOUR))); QuantityFunctions.isGreaterThan(oneDay).or(QuantityFunction s.fiterByExcludingUnit(SI.DAY)));
- 44. Measurement API QuantitySummaryStatistics summary = times.stream().collect(QuantityFunctions.summarizingMeasure( SI.HOUR)); //result in hours summary.getCount(); summary.getAverage(); summary.getMax(); summary.getMin(); summary.getSum();
- 45. Measurement API QuantitySummaryStatistics summaryDay = summary.to(SI.DAY); summary.getMin(SI.MINUTE); summary.getMax(SI.MINUTE); summary.getSum(SI.MINUTE); summary.getAverage(SI.MINUTE);
- 46. Measurement API Quantity t1 = timeFactory.create(1, DAY); Quantity m1 = timeFactory.create(12, KILOGRAM); Quantity l1 = timeFactory.create(12, KILOGRAM); t1.add(m1); //error Quantity s1 = l1.divide(t1).asType(Speed.class);
- 47. Measurement API Acceleration Length Angle Area Mass Power Energy Speed Force Temperature Time Information Volume And more! 52 quantities
- 48. It isn't a Spoiler Sunday, September 28 12:30 p.m.3:00 p.m. Moscone North, Hall D Thursday, October 2 9:00 a.m.10:45 a.m. Marriott Marquis, Salon 7/8/9
- 49. Thank you Otvio Santana @otaviojava