Your SlideShare is downloading. ×
201303 - Java8
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Saving this for later?

Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime - even offline.

Text the download link to your phone

Standard text messaging rates apply

201303 - Java8

231
views

Published on

Published in: Technology, Education

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
231
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. SYLVAIN MOUGENOT•Sylvain.Mougenot@gmail.com•14 ans avec Java2•https://github.com/smougenot/
  • 2. Sur la route de Java1995JDK Beta1996JDK 1.01997JDK 1.11998JDK 1.22000JDK 1.32002JDK 1.42004JDK 52006JDK 6EOL : 2013/0232011JDK72013JDK82015JDK9EOL : 2013/02
  • 3. Des versions régulières- SE tous les 2 ans- EE tous les 2 ansUne règle du jeu claireSur la route de JavaUne règle du jeu claire- Un contenu prévu mais pas impératif- Un report des contenus en retard4
  • 4. Objectifs- Simplification- Productivité- Moderniser le language- Moderniser la plateformeS’adapter aux usagesSur la route de Java- Cloud- Embarqué- Internet des objets- Cycles courts5
  • 5. Java est partoutSur la route de JavaMac OS X Linux ARM Java Card6HTTP://WWW.APPLE.COM/ HTTP://WWW.RASPBERRYPI.ORG/
  • 6. SE8- Septembre 2013- Lambda- Nashorn- Dates- Annotations- JavaFx- OptimisationsSE8- OptimisationsEvolution majeureMigration transparente8
  • 7. SE89λ
  • 8. Evolution du language- Closure façon java- Limité à la notion d’interface fonctionnelle- Implémentation par défaut d’une méthode dans une interface- Refonte des API- ParallélisationSE8 : λImpact profond dans la plateforme- Introduction de nouveautés dans le bytecodePour en savoir plus- http://cr.openjdk.java.net/~briangoetz/lambda/sotc3.html10
  • 9. SE8 : λRunnable ditBonjour = new Runnable() {@Overridepublic void run() {System.out.print("Bonjour");}};11Runnable ditBonjourL = () -> System.out.print("Bonjour");
  • 10. SE8 : λpublic interface Maximum<T extends Number>{T max(T a, T b );}Maximum<Integer> maxL1 = (Integer a, Integer b) -> { return Math.max(a, b); };Maximum<Integer> maxL2 = (a, b) -> { return Math.max(a, b); };Maximum<Integer> maxL3 = (a, b) -> Math.max(a, b);12Maximum<Integer> maxL3 = (a, b) -> Math.max(a, b);Maximum<Integer> maxL4 = Math::max ;
  • 11. SE8 : λpublic interface Taille<T extends CharSequence>{int taille(T text);boolean estVide(T text);13}Taille<String> taille = text -> text.length();
  • 12. default boolean estVide(T text){return 0 == taille(text);}SE8 : λpublic interface Taille<T extends CharSequence>{int taille(T text);14}Taille<String> taille = text -> text.length();
  • 13. SE8 : λ@FunctionalInterfacepublic interface Taille<T extends CharSequence>{int taille(T text);default boolean estVide(T text){return 0 == taille(text);}15}Taille<String> taille = text -> text.length();
  • 14. Evolution majeure des collections- Parallélisation, « lazyness »Package java.util.streams- Construction de pipelines d’opérations : filter map reduceSE8 : λD’autres API vont utiliser ces extensions16
  • 15. SE8 : λclass Developpeur{String nom; int anneeEmbauche; int nbProjets;}...int maxPrj = 0;for (Developpeur d : devs){if(d.anneeEmbauche > 2010){17if(d.anneeEmbauche > 2010){maxPrj = Math.max(maxPrj, d.nbProjets);}}int maxPrj =devs.stream().filter(d -> d.anneeEmbauche > 2010).map(d -> d.nbProjets).reduce(0, Math::max);.parallelStream()
  • 16. Stream<T>SE8 : λStream<T> filter(Predicate<? super T> predicate);<R> Stream<R> map(Mapper<? extends R, ? super T> mapper);T reduce(T base, BinaryOperator<T> op);Stream<T> sorted(Comparator<? super T> comparator);Stream<T> cumulate(BinaryOperator<T> operator);19Optional<T> findFirst();Optional<T> findAny();boolean anyMatch(Predicate<? super T> predicate);boolean allMatch(Predicate<? super T> predicate);boolean noneMatch(Predicate<? super T> predicate);...
  • 17. FunctionalInterfaceRunnableComparableComparatorIterableFileFilterjava.util.function.*SE8 : λjava.util.function.*BinaryOperatorFunctionPredicateorg.springframework.jdbc.core.ResultSetExtractororg.springframework.jdbc.core.StatementCallback20
  • 18. JavaScriptv-languageFunnelMiniLispDroolsGJythonBex ScriptJudoScriptTigerRexxSchemeTermWareTeaFScriptPascalLuckScala SatherfooAdaiScriptOberonJRubyDawnForthZigzagC#BeanShellCAL+SE8 : NASHORN21| Copyright © 2011, Oracle and/or its affiliates. All rights reserved.ClojureTclLogoJHCRPrologLLPJESSEiffelSmalltalkCorrelateSleepSimkinWebLProcessing IconModula-2EPresentBasicHojoPHPJicklePiccolaPLANObjectScriptiScriptSALSAOberonPhobosGroovyYasslNiceYoixAnvilPnuts
  • 19. SE8 : NashornAjout d’un language dynamique- Valide « invoke dynamic »- Ajoute une implémentation performante de JS- ECMA Script 262- Remplace rhinoFait parti du projet « Multi Language VM »22- Continuera sur SE9
  • 20. SE8 :23
  • 21. Besoin de Refonte de l’API- Non intuitive- Cause de bug- Pas de sémantiques ex: pas de durée- …SE8 : Date24
  • 22. BEURK !!!SE8 : Dateint year = 2013 - 1900;int month = 3 - 1;Date date = new Date(year, month, 19, 10, 50);TimeZone zone = TimeZone.getTimeZone("Asia/Hong_Kong");Calendar cal = new GregorianCalendar(zone);cal.setTime(date);25DateFormat fm = new SimpleDateFormat("yyyy/MM/dd HH:mm Z");fm.setTimeZone(zone);Date calDate = cal.getTime();String str = fm.format(calDate);System.out.printf("La date est %sn", str);
  • 23. Refonte- L’ancienne API est intégrée- java.util.Date, java.util.Calendar, …- Sémantique claire- Instant, durée, année, jour du mois, … seconde de la minute,…- Manipulation naturelle- Ex : Ajout entre les types, accès direct aux éléments d’uneSE8 : Date- Ex : Ajout entre les types, accès direct aux éléments d’unedate- Immuable et threadsafe- Déjà disponible (RI)- https://github.com/ThreeTen/threeten26
  • 24. SE8 : DateLocalDateTime.of(2013, 3, 19, 10, 50);ZonedDateTime.of(2013, 3, 19, 10, 50, 0, 0, TimeZone.of("Asia/Hong_Kong"));27
  • 25. SE8 : DateInstantDurationLocalDateLocalTimeLocalDateTimeZonedDateTime28YearMonthMonthDayYearMonthOfYearDayOfWeek
  • 26. Œuf coqueSE8 : Dateint tempsCuisson = 3 * 60 * 1_000;long fin = System.currentTimeMillis() + tempsCuisson;//boucle dattente...if(System.currentTimeMillis()>fin){//cest prêt29//cest prêt} ...Duration tempsCuisson = Duration.ofStandardMinutes(3);Instant fin = Instant.now().plus(tempsCuisson);//boucle dattente...if(Instant.now().isAfter(fin)){//cest prêt} ...
  • 27. Détecter une dateSE8 : DateCalendar cible = Calendar.getInstance();cible.set(DAY_OF_MONTH, 31);cible.set(MONTH, DECEMBER);Calendar aujourdhui = Calendar.getInstance();if ( aujourdhui.get(MONTH) == cible.get(MONTH)&&30&&aujourdhui.get(DAY_OF_MONTH) == cible.get(DAY_OF_MONTH)) {// cest le jour J}MonthDay cible = MonthDay.of(12, 31);if(cible.equals(MonthDay.now())){// cest le jour J}
  • 28. SE8 :31@
  • 29. Annotations de type- Renforcer le typage- Documenter, renforcer les contrôles à la compilation- Pouvoir placer des annotations sur toute utilisation de type- Ajout de plugins pour le compilateur- Détection de bug- Plusieurs plugins existent- http://types.cs.washington.edu/checker-framework/SE8 : Annotation- http://types.cs.washington.edu/checker-framework/32
  • 30. Mettre des annotations partoutSE8 : Annotation de typeString myStr = (@NonNull String) myObject;List<@Immutable T> myList ;class Folder<F extends @Existing File> { ... }33@Immutable Date date = new Date(0);date.setTime(70); // erreur de compilationjavac -processor MyChecker *.java+AMÉLIORER LE CODE EN AJOUTANT DE LA VÉRIFICATION
  • 31. SE8 : Annotation@JoinColumns({@JoinColumn(name="ADR_CODE", referencedColumnName="CODE"),@JoinColumn(name="ADR_CP", referencedColumnName="CP")})private Address address;34@JoinColumn(name="ADR_CODE", referencedColumnName="CODE")@JoinColumn(name="ADR_CP", referencedColumnName="CP")private Address address;
  • 32. SE8 : Annotation@Target({METHOD, FIELD})@Retention(RUNTIME)@ContainerFor(JoinColumn.class)public @interface JoinColumns {JoinColumn[] value();}35@Target({METHOD, FIELD})@Retention(RUNTIME)@ContainedBy(JoinColumns.class)public @interface JoinColumn { ... }
  • 33. - Webview- Html5 javascriptSE8- Html5 javascript- 3d- Scene builder 2- Démo sous IOS, Android36
  • 34. OptimisationsSE837
  • 35. Disparition du perm gen space- Simplification du tuning- Changement à chaud- Mais un MetaSpaceDéfinition de profils pour la JVMSE8 : OptimisationSDéfinition de profils pour la JVM- Limiter l’empreinte du runtime Java- Convergence ME SE- En attendant la modularisation- http://openjdk.java.net/jeps/161Flight Recorder- Enregistreur de bord pour java38
  • 36. ça ne vous suffit pas ?- Sumatra- Utiliser la carte graphique pour les calculs- Client http- G1 amélioré- Faire plus sans full GC- Améliore l’inférence de type- Chainage, à l’intérieur de l’appel d’une méthodeSE8- Chainage, à l’intérieur de l’appel d’une méthode- Encodages- Crypto- … plus de 40 points- Sur plus de 70 dans le JEP (Jdk Enhancement Proposal)39
  • 37. Java EE7 Avril 2013http://java.net/projects/javaee-spec/pages/HomeJava se8 Septembre 2013http://openjdk.java.net/projects/jdk8/RessourcesJava se9 2015Java EE8 201540MERCI