• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
201303 - Java8
 

201303 - Java8

on

  • 427 views

 

Statistics

Views

Total Views
427
Views on SlideShare
356
Embed Views
71

Actions

Likes
0
Downloads
0
Comments
0

1 Embed 71

http://mj89sp3sau2k7lj1eg3k40hkeppguj6j-a-sites-opensocial.googleusercontent.com 71

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    201303 - Java8 201303 - Java8 Presentation Transcript

    • SYLVAIN MOUGENOT•Sylvain.Mougenot@gmail.com•14 ans avec Java2•https://github.com/smougenot/
    • Sur la route de Java1995JDK Beta1996JDK 1.01997JDK 1.11998JDK 1.22000JDK 1.32002JDK 1.42004JDK 52006JDK 6EOL : 2013/0232011JDK72013JDK82015JDK9EOL : 2013/02
    • 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
    • Objectifs- Simplification- Productivité- Moderniser le language- Moderniser la plateformeS’adapter aux usagesSur la route de Java- Cloud- Embarqué- Internet des objets- Cycles courts5
    • Java est partoutSur la route de JavaMac OS X Linux ARM Java Card6HTTP://WWW.APPLE.COM/ HTTP://WWW.RASPBERRYPI.ORG/
    • SE8- Septembre 2013- Lambda- Nashorn- Dates- Annotations- JavaFx- OptimisationsSE8- OptimisationsEvolution majeureMigration transparente8
    • SE89λ
    • 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
    • SE8 : λRunnable ditBonjour = new Runnable() {@Overridepublic void run() {System.out.print("Bonjour");}};11Runnable ditBonjourL = () -> System.out.print("Bonjour");
    • 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 ;
    • SE8 : λpublic interface Taille<T extends CharSequence>{int taille(T text);boolean estVide(T text);13}Taille<String> taille = text -> text.length();
    • 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();
    • 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();
    • 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
    • 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()
    • 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);...
    • FunctionalInterfaceRunnableComparableComparatorIterableFileFilterjava.util.function.*SE8 : λjava.util.function.*BinaryOperatorFunctionPredicateorg.springframework.jdbc.core.ResultSetExtractororg.springframework.jdbc.core.StatementCallback20
    • JavaScriptv-languageFunnelMiniLispDroolsGJythonBex ScriptJudoScriptTigerRexxSchemeTermWareTeaFScriptPascalLuckScala SatherfooAdaiScriptOberonJRubyDawnForthZigzagC#BeanShellCAL+SE8 : NASHORN21| Copyright © 2011, Oracle and/or its affiliates. All rights reserved.ClojureTclLogoJHCRPrologLLPJESSEiffelSmalltalkCorrelateSleepSimkinWebLProcessing IconModula-2EPresentBasicHojoPHPJicklePiccolaPLANObjectScriptiScriptSALSAOberonPhobosGroovyYasslNiceYoixAnvilPnuts
    • 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
    • SE8 :23
    • Besoin de Refonte de l’API- Non intuitive- Cause de bug- Pas de sémantiques ex: pas de durée- …SE8 : Date24
    • 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);
    • 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
    • SE8 : DateLocalDateTime.of(2013, 3, 19, 10, 50);ZonedDateTime.of(2013, 3, 19, 10, 50, 0, 0, TimeZone.of("Asia/Hong_Kong"));27
    • SE8 : DateInstantDurationLocalDateLocalTimeLocalDateTimeZonedDateTime28YearMonthMonthDayYearMonthOfYearDayOfWeek
    • Œ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} ...
    • 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}
    • SE8 :31@
    • 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
    • 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
    • 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;
    • 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 { ... }
    • - Webview- Html5 javascriptSE8- Html5 javascript- 3d- Scene builder 2- Démo sous IOS, Android36
    • OptimisationsSE837
    • 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
    • ç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
    • Java EE7 Avril 2013http://java.net/projects/javaee-spec/pages/HomeJava se8 Septembre 2013http://openjdk.java.net/projects/jdk8/RessourcesJava se9 2015Java EE8 201540MERCI