Ce 15 septembre 2020 sort Java 15. Câest lâoccasion pour cette dĂ©pĂȘche de revenir sur les nouveautĂ©s entre les blocs de texte et autres ramasseâmiettes. On en profite pour parler de quelques informations autour de Java (les vingtâcinq ans de la plateâforme, les nouveaux champions, etc).
Sommaire
Java 15
Abandons
Avec ce nouveau rythme, Java sâautorise Ă supprimer des parties de la plateâforme. Pour cette version :
- le systĂšme dâexploitation Solaris et lâarchitecture SPARC, rendus obsolĂštes par la derniĂšre version, ne sont plus pris en charge (JEP 381) â cocasse quand on connaĂźt les dĂ©buts du langageâŻ;
- Nashorn, le moteur JavaScript inclus dans le JDK, a lui aussi Ă©tĂ© retirĂ© (JEP 372), il Ă©tait considĂ©rĂ© comme obsolĂšte depuis la version 11 sortie en septembre 2018âŻ;
- ce nâest pas encore une suppression, mais RMI activation (et seulement RMI activation pas tout RMI) est rendu obsolĂšte (JEP 385)âŻ;
-
biased locking nâest plus activĂ© par dĂ©faut (il faut ajouter lâoption
-XX:+UseBiasedLocking), elle est du mĂȘme coup considĂ©rĂ©e obsolĂšte (JEP 374).
Conséquences des retraits
Cas de la prise en charge SPARC/SOLARIS
Le JDK Ă©tant plutĂŽt vaste, le retrait de la prise en charge dâune architecture a des consĂ©quences Ă de trĂšs nombreux endroits allant des systĂšmes de construction, la sĂ©curitĂ©, la gĂ©nĂ©ration du bytecode ou encore la gĂ©nĂ©ration dâIHM. La personne en charge de la JEP a donc fait le tour du propriĂ©taire pour retirer tout ce qui devait lâĂȘtre, comme on peut le voir sur la liste de diffusion. Les plus curieux pourront suivre les diffĂ©rents liens pour voir le mode de dĂ©veloppement du JDK et les spĂ©cificitĂ©s de chaque domaine. Au final, ce sont plus de 127âŻ000 lignes qui ont Ă©tĂ© supprimĂ©es, ce qui ne reprĂ©sente que moins dâun pourcent du nombre total de lignes de code.
Cas de la gestion du JSON
Suite Ă la suppression du Nashorn JavaScript Engine, il est apparu que le JDK utilisait le JavaScript et par consĂ©quent le JSON pour certaines fonctionnalitĂ©s. Se pose alors la question dâune gestion native du JSON ou de laisser cette compĂ©tence Ă des bibliothĂšques tierces. Actuellement, rien nâest dĂ©cidĂ© et il y a deux directions possibles :
- oui, mais sous quelle forme et quand�
- non pas pour Ă©viter dâavoir quelque chose de mal foutu comme pour le XML ou encore le journalisation et se concentrer sur ce qui fait rĂ©ellement la plusâvalue du JDK.
Nouveautés
Ramasseâmiettes
Deux nouveaux ramasseâmiettes (garbage collectors â gc) sont disponibles en stable avec cette version :
Shenandoah
Shenandoah est un ramasseâmiettes qui vise Ă rĂ©duire les temps de pause. Pour atteindre cet objectif, il dĂ©place les objets sans avoir Ă mettre en pause lâapplication. Il est aussi capable de mieux parallĂ©liser le dĂ©placement dâobjet. Cela ne supprime pas totalement les pauses : elles sont encore nĂ©cessaires pour libĂ©rer la mĂ©moire. Avec Shenandoah, la vĂ©rification des objets en vie et leur dĂ©placement se fait sans pause, mais le nettoyage de la mĂ©moire en rĂ©clame une. Comme il fait moins de choses pendant les pauses, elles sont plus courtes. Lâactivation se fait via lâoption -XX:+UseShenandoahGC. Ce changement est dĂ©crit dans la JEP 379.
ZGC
ZGC se donne pour objectif dâavoir des temps de pause faibles, y compris sur de grands tas (heap) de lâordre du tĂ©raoctet. Pour cela, il est capable de dĂ©charger les classes sans arrĂȘter lâexĂ©cution. Tous les ramasseâmiettes actuels de Java effectuent du dĂ©chargement de classes, mais ils sont obligĂ©s de le faire uniquement durant le stop the world. ZGC a travaillĂ© pour pouvoir faire cela en concurrence de lâapplication. Il semble que cela a eu des effets de bord positifs, notamment le temps de pause nâest dĂ©pendant que du nombre de fils dâexĂ©cution de lâapplication. Il sâagit de lâamĂ©lioration majeure, mais il y a eu bien dâautres travaux comme le fait de pouvoir rendre de la mĂ©moire au systĂšme dâexploitation, la gestion de tas de 8âŻMio jusquâĂ 16âŻTio. Actuellement, seuls Windows, macOS et GNU/Linux sur les architectures x86-64 et AArch64 sont pris en charge. Pour lâactiver, câest lâoption -XX:+UseZGC. Ce changement est dĂ©crit dans la JEP 377.
Câest trĂšs bien mais, du coup, comment choisir entre Shenandoah, ZGC ou rester sur G1âŻ?
Câest une question bien complexe qui est Ă©videmment trĂšs dĂ©pendante de lâapplication cible. PremiĂšrement, G1, malgrĂ© le fait quâil continue dâĂȘtre amĂ©liorĂ©, est trĂšs loin derriĂšre ZGC et Shenandoah. Les objectifs de ces derniers sont assez similaires et ils sont tellement efficaces quâon ne peut pas voir de diffĂ©rence entre eux quand ils sont comparĂ©s Ă G1⊠De mon avis personnel et de ce que jâen ai lu :
- ZGC est fait pour ĂȘtre simple, il est moins configurableâŻ;
- Shenandoah est plus configurable et il offre des temps de pause plus prédictibles que ZGC.
NĂ©anmoins, tout cela peut encore changer dâici la sortie de Java 17 (en septembre 2021).
Blocs de texte
Les blocs de texte arrivent enfin en version dĂ©finitive (JEP 378). Cette fonctionnalitĂ© a fait beaucoup parler dâelle depuis son introduction en Java 13. Il est donc maintenant possible de dĂ©finir des chaĂźnes de caractĂšres multilignes comme ça :
String query = """
SELECT "EMP_ID", "LAST_NAME" FROM "EMPLOYEE_TB"
WHERE "CITY" = 'INDIANAPOLIS'
ORDER BY "EMP_ID", "LAST_NAME";
""";
Classes cachées
Cette nouveautĂ© offre la possibilitĂ© aux cadriciels de gĂ©nĂ©rer des classes pour son propre usage qui ne seront pas accessibles de lâextĂ©rieur et ainsi de gĂ©rer la tambouille interne sans risque de fuite, notamment en utilisant la rĂ©flexion.
Java possĂšde des classes internes, qui ne sont pas directement exposĂ©es au niveau de lâAPI, mais qui restent accessibles par rĂ©flexion. Ce nâest pas leur nom peu allĂ©chant Unsafe qui empĂȘche quâelles soient largement utilisĂ©es par tout un tas de logiciels. Un des objectifs des dĂ©veloppeurs du JDK est de faire en sorte que cette pratique cesse. Un article de Java Magazine en parle et il y a, bien sĂ»r, la JEP 371 qui dĂ©crit cette Ă©volution.
Câest donc une Ă©tape de plus sur la route de la suppression des classes de sun.misc.Unsafe.
Sous le capot
- cette version inclut la prise en charge des signatures EdDSA (JEP 339)âŻ;
- lâAPI
DatagramSocketbĂ©nĂ©ficie dâune rĂ©implĂ©mentation (JEP 373).
En vrac
- nouvelles mĂ©thodes pour obtenir une valeur absolue : JDKâ8241374âŻ;
- ajout de Unicode 13 : JDKâ8239383âŻ;
- mise Ă jour Ă la version 37 de la base Unicode CLDR pour amĂ©liorer lâinternationalisation de vos logicielsâŻ;
- lâAppCDS gĂšre dĂ©sormais les lambdas, ce qui permet dâaccĂ©lĂ©rer encore un peu le dĂ©marrage de la JVMâŻ;
- Les Ă©numĂ©rations peuvent dĂ©sormais contenir 4âŻ103 constantesâŻJDKâ8241798âŻ!
AvantâpremiĂšres
Les fonctionnalitĂ©s ciâdessous sont considĂ©rĂ©es comme en avantâpremiĂšre (preview), elles sont sujettes Ă changement dâune version Ă lâautre.
Filtrage par motif avec instanceof
La filtrage par motif (pattern matching) sur instanceof (JEP 383) permet de discriminer un objet selon sa classe et de récupérer une référence correctement typée. Un exemple possible serait :
Object myVar = foo();
if (myVar instanceof String s) {
System.out.println(s);
}
Cela nâest pas encore disponible avec lâinstruction switch.
Sealed classes
Les sealed classes sont des classes dont on contrĂŽle lâhĂ©ritage. Cela permet dâavoir une connaissance Ă la compilation de toutes les classes filles de cette derniĂšre. Le premier gain est de pouvoir sâassurer quâon a gĂ©rĂ© tous les cas dans un switch qui vĂ©rifie le type par instanceof. Câest dĂ©crit dans la JEP 360.
LâĂ©criture est assez diffĂ©rente de ce que lâon trouve en Scala. Ce dernier oblige Ă ce que toutes les classes filles soient dĂ©crites dans le mĂȘme fichier. Java garde la volontĂ© dâavoir (en principe) une seule classe par fichier. Cela sâĂ©crit donc ainsi :
package org.linuxfr;
public abstract sealed class Contenu
permits org.linuxfr.Depeche,
org.linuxfr.Journal,
org.linuxfr.Lien {
// ...
}
Il faut voir que cela remet en cause les possibilitĂ©s dâĂ©tendre le code. Ăa sert quasi uniquement quand on a besoin de lâexhaustive checking au sein du pattern matching. Pour bien dĂ©crire lâintĂ©rĂȘt, cela permet dâĂ©crire :
String foo(Contenu c) {
return switch(c) {
case Depeche d -> "plouf";
case Journal j -> "plif";
case Lien l -> "plof";
};
}
Sans avoir besoin dâavoir un cas default.
Records
Les records (apparus dans la prĂ©cĂ©dente version de Java) sont des classes immuables qui bĂ©nĂ©ficient dâune syntaxe succincte. Cette mise Ă jour assure le bon fonctionnement avec les sealed classes et sur lâusage dâannotations, mais la JEP 384 est trĂšs complĂšte pour dĂ©crire tout leur fonctionnement.
Pour ce qui est du code un Point en deux dimensions se déclarera comme ça :
record Point(int x, int y) {}
Et elle sâutilise comme nâimporte quelle classe. Comme pour le constructeur vide créé par dĂ©faut, pour vous ici le langage dĂ©finit le equals()/hashCode(), les getter (avec un style « builder », dans lâexemple on a x() et y()), le constructeur avec le profil que vous avez dĂ©fini et une mĂ©thode toString(). Comme pour le constructeur par dĂ©faut, il est possible de surcharger les implĂ©mentations fournies. Cela devrait rĂ©duire lâintĂ©rĂȘt de lombok ou immutables.
Cette nouvelle itération apporte diverses évolutions plus ou moins discrÚte :
- il y a lâinterdiction dâutiliser
thisdans le constructeur canonique, câest la solution trouvĂ©e pour Ă©viter aux dĂ©veloppeurs peu attentionnĂ©s de faire nâimporte quoiâŻ; - une modification tardive fait que les attributs des records deviennent rĂ©ellement finals et ne peuvent pas ĂȘtre modifiĂ©s par rĂ©flexion JDKâ8247444âŻ;
- la possibilité de créer des
recordslocaux de la mĂȘme maniĂšre que les classesâŻ; - les mĂ©canismes de sĂ©rialisation et de dĂ©sĂ©rialisation propre et qui, donc, diffĂšrent des classes :
- la sĂ©rialisation est basĂ©e seulement sur lâĂ©tat de lâobjet,
- la « désérialisation » utilise uniquement le constructeur canonique.
La version finale sera certainement livrée en version 16.
ĂcosystĂšme
fastâjar
Le projet Quarkus est un cadriciel Java alternatif Ă Spring visant lâextrĂȘme performance et Ă ĂȘtre developer friendly. Sa version 1.5 propose un nouvel empaquetage pour les applications Java nommĂ© fastâjar.
Un fichier au format JAR est une archive ZIP des applications Java contenant les classes compilĂ©es ainsi que quelques fichiers de description et des fichiers de configuration de lâapplication. Il est possible dây inclure les bibliothĂšques utilisĂ©es par lâapplication : câest ce que lâon appelle un fatâjar ou un uberâjar. Câest un peu comme une compilation statique, cela permet de distribuer lâapplication avec un unique fichier (il faut « juste » avoir un JDK installĂ©).
La simplicitĂ© de ces uberâjar leur a fait rencontrer un vif succĂšs, mais lâarrivĂ©e de Docker a un peu changĂ© la donne. Le systĂšme de couches de Docker (une image Docker dĂ©pend dâune prĂ©cĂ©dente image dont on a modifiĂ© le contenu) pousse Ă organiser ses images comme suit :
- lâimage de base contenant le JDKâŻ;
- on ajoute les dĂ©pendances de lâapplication dans une couche dĂ©diĂ©eâŻ;
- on ajoute lâapplication dans une autre coucheâŻ;
- si applicable, on ajoute les fichiers de configuration dans une derniĂšre couche.
LâidĂ©e sousâjacente est de dĂ©couper les couches en fonction de la frĂ©quence de mise Ă Â jour :
- on modifie plus frĂ©quemment sa configuration que lâapplicationâŻ;
- on met Ă jour plus frĂ©quemment lâapplication que ses dĂ©pendancesâŻ;
- on met à jour plus fréquemment les dépendances que le JDK.
Cela permet de ne télécharger que les derniÚres couches lors des mises à  jour.
Lors de leurs tests de performance, les dĂ©veloppeurs de Quarkus se sont rendu compte que le temps de dĂ©marrage dâune application uberâjar est bien plus court quâavec les dĂ©pendances sĂ©parĂ©es (voir ici). Pour pouvoir Ă la fois avoir un empaquetage Java efficace et continuer de suivre les bonnes pratiques Docker, ils ont créé fastâjar. Il sâagit simplement dâun JAR Ă©clatĂ©, mais qui possĂšde un index dans le JAR principal qui indique oĂč trouver chaque classe. Le chargeur de classes nâa donc plus Ă aller chercher dans chaque JAR si la classe quâil cherche sây trouve ou non.
Développement du JDK
La version 16 du JDK donnera quelques modifications importantes dans son développement :
- passage Ă C++14 (JEP 347)âŻ; actuellement cantonnĂ© Ă C++98, les nouveaux dĂ©veloppements seront effectuĂ©s avec la norme C++14, la JEP dĂ©crit ce qui est autorisĂ© ou non dâutiliserâŻ;
- devnewton en avait parlĂ© dans les liens : passage de Mercurial Ă Git (JEP 357), cette dĂ©cision est motivĂ©e par la taille de lâhistorique, lâoutillage autour de Git et les hĂ©bergements disponibles pour Git â justement, dans la foulĂ©e, il a Ă©tĂ© dĂ©cidĂ© de partir chez GitHub (JEP 369)âŻ; vous trouverez les raisons de ce changement dans la JEP associĂ©e : Why GitHub?
Java champions
Les Java Champions sont un groupe de promoteurs de Java indĂ©pendants dâOracle (ou de Sun Ă lâĂ©poque). Les membres sont Ă©lus par leurs pairs (et sont aussi proposĂ©s Ă lâĂ©lection de cette façon).
Le 5 mai dernier, Audrey Neveu Ă©tait Ă©lue Java Champion. Elle travaille chez Pivotal comme dĂ©veloppeuse Java, Kotlinv et JS, et est surtout connue en tant que membre des Cast Codeurs oĂč elle sensibilise aux enjeux sociĂ©taux que les technologies peuvent poser (les risques liĂ©s aux libertĂ©s, les problĂšmes que les GAFAM peuvent induireâŠ).
Vingtâcinq ans de Java
Le 25 mai dernier Java a soufflĂ© ses vingtâcinq bougies. Ăa a Ă©tĂ© lâoccasion de crĂ©er diffĂ©rents Ă©vĂšnements : par exemple, Oracle a mis en ligne Moved by Java, et ParisJUG a organisĂ© une soirĂ©e rĂ©trospective avec plusieurs champions Java francophones câest visible sur YouTube. On y retrouve pĂȘleâmĂȘle :
- Audrey Neveu, nouvelle championneâŻ;
- Antonio Gonçalves, cofondateur du ParisJUG, de Devoxx France, il travaille pas mal autour de Java EEâŻ;
- Emmanuel Bernard, dĂ©veloppeur RedâŻHat sur les projets Hibernate et maintenant QuarkusâŻ;
- JeanâMichel Doudoux il a produit Ă©normĂ©ment de documentations autour de Java, entre autres sur Developpez.com, il en publie aussi sur son propre siteâŻ;
- RĂ©mi Forax, enseignant Ă lâuniversitĂ©, il est contributeur OpenJDK depuis trĂšs longtemps.
Il y a aussi un article sympa listant 25Â superâapplications.
AdoptOpenJDK devient Adoptium
AdoptOpenJDK est une distribution de Java trĂšs populaire. Elle a rejoint en juin dernier la fondation Eclipse. Il peut ĂȘtre compliquĂ© dâun point de vue lĂ©gal dâutiliser le nom « OpenJDK », il a donc Ă©tĂ© choisi de renommer le projet Eclipse Adoptium. Cela va permettre au projet de bĂ©nĂ©ficier de toute lâinfrastructure proposĂ©e par Eclipse dâun point de vue technique (hĂ©bergement par exemple) et organisationnel (la gouvernance nâest pas attachĂ©e Ă une Ă©ventuelle entreprise).
Aller plus loin
- OpenJDKÂ 15 (94 clics)
- Quarkus 1.5 (72 clics)

# Immutables
Posté par ckyl . Ăvalué à  5. DerniĂšre modification le 15 septembre 2020 Ă 17:22.
Oui est non. Non pour la partie construction d'objets immutables complexes. DĂšs que tu sors des cas d'exemple Ă 4 attributs, en l'absence de paramĂštres nommĂ©s, on n'a toujours pas d'autre solution que le builder pattern pour avoir quelque chose de vaguement lisible et maintenable. Cette partie a Ă©tĂ© dĂ©libĂ©rĂ©ment mise hors pĂ©rimĂštre des records, donc leur principal intĂ©rĂȘt c'est cĂŽtĂ© mĂ©moire & perf et boilerplate.
[^] # Re: Immutables
Posté par barmic 𩩠. Ăvalué à  3.
C'est pour ça que je parlais de réduire.
C'est pas ce qu'ils indiquent pour la mĂ©moire et la perfâŻ:
Je ne vois rien qui parle de performance ou de mémoire, par contre je trouve drÎle qu'ils cherchent à simplifier la création de structures simples sans faire la guerre au boilerplate. Je comprends plus ou moins l'idée, mais la façon dont c'est présenté dans la JEP me semble surtout chercher à montrer qu'ils ne veulent pas intégrer cette syntaxe dans les objets classiques.
De mon humble avis l'un des gros objectif finaux des records mĂȘme si ce n'est pas encore implĂ©mentĂ© c'est de pouvoir les dĂ©construires.
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: Immutables
Posté par NonolapĂ©ro . Ăvalué à  4.
Câest un des projets en cours. Brian Goetz a Ă©crit deux articles Ă ce sujet.
Les plus curieux pourront aussi lire les documents prĂ©sent ici pour se faire une idĂ©e dâoĂč vient et vers oĂč va Java du cĂŽtĂ© du projet Amber. Pour rappel, Amber a pour but de rendre le Java plus agrĂ©able Ă Ă©crire en le rendant plus expressif et plus concis.
[^] # Re: Immutables
Posté par barmic 𩩠. Ăvalué à  3.
J'ai l'impression que c'est le projet qui fait le plus parler de lui. Ăa me donne l'impression que le projet Coin a montrĂ© que c'est cool de faire Ă©voluer le langage :)
Merci pour les liens
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: Immutables
Posté par NonolapĂ©ro . Ăvalué à  3.
Il fait parler de lui car il touche beaucoup de monde et avance de maniĂšre assez visible mais globalement ça ne touche pas vraiment au cĆur du langage. Le projet Loom est Ă©galement trĂšs attendu et ne devrait plus trop tarder (au pif, moins de deux ans). Il apportera les thread lĂ©gers manipulables par million en ne changeant que quelques petits trucs.
Dans ce code il suffit de mettre Ă jour la boucle avec
[^] # Re: Immutables
Posté par ckyl . Ăvalué à  3.
J'avais Valhalla en tĂȘte qui n'est clairement pas dans le pĂ©rimĂštre des record et des JEP actuelles mais qui introduit pour contrainte:
AprÚs avoir relu le state of Valhalla, la dépendance record / inline est faible, techniquement inexistante, mais "tire dans la bonne direction".
Tu as parfaitement raison sur la déconstruction.
[^] # Re: Immutables
Posté par barmic 𩩠. Ăvalué à  3.
J'avais adoré la présentation de Rémi Forax là dessus à devoxx France, il pensait qu'on aurait les inline pour java 10 (j'adore son optimisme
^^).https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: Immutables
Posté par BenoĂźt Sibaud (site web personnel) . Ăvalué à  9.
Forcément c'est compliqué aprÚs Java :).
« True is the new false » comme ne disait pas D. Trump.
# Java 15, le nouveau Kotlin ? (mais un peu en retard quand mĂȘme)
Posté par SpaceFox (site web personnel, Mastodon) . Ăvalué à  4.
Ăa fait plaisir de voir que Java tente de rattraper son retard sur Kotlin. Dans lâordre de la dĂ©pĂȘche :
Ăvidemment les amĂ©liorations de la JVMâŻdevraient profiter Ă tous les langages qui lâutilisent, dont Kotlin-sur-JVM (mĂȘme si le langage a lâair surtout utilisĂ© sur Android).
La connaissance libre : https://zestedesavoir.com
[^] # Re: Java 15, le nouveau Kotlin ? (mais un peu en retard quand mĂȘme)
Posté par NonolapĂ©ro . Ăvalué à  4. DerniĂšre modification le 16 septembre 2020 Ă 10:32.
En gros Java Ă trois ans de retard sur Kotlin mais quand il fait les choses il le fait mieux. Ce message est tirĂ© de cette vidĂ©oâŻ:âŻhttps://www.youtube.com/watch?v=te3OU9fxC8U
[^] # Re: Java 15, le nouveau Kotlin ? (mais un peu en retard quand mĂȘme)
Posté par SpaceFox (site web personnel, Mastodon) . Ăvalué à  5.
Jâaurais pas dit «âŻmieuxâŻÂ» dâaprĂšs la vidĂ©o. Le message que jâen retiens, câest plutĂŽt que Java a la possibilitĂ© de modifier directement la JVM pour mieux coller Ă ses Ă©volutions, et donc que les implĂ©mentations Java des fonctionnalitĂ©s peuvent ĂȘtre plus efficaces (le temps que Kotlin tire partie des Ă©volutions de la JVM Ă son tour).
La connaissance libre : https://zestedesavoir.com
[^] # Re: Java 15, le nouveau Kotlin ? (mais un peu en retard quand mĂȘme)
Posté par barmic 𩩠. Ăvalué à  3. DerniĂšre modification le 16 septembre 2020 Ă 14:18.
Pourquoi kotlin plutĂŽt que groovy, scala ou ceylon par exempleâŻ? Clairement aucun de ses concepts n'ont Ă©tait inventĂ© par kotlin, ils ont mĂȘme dĂ©jĂ d'autres implĂ©mentation sur la jvm. Et java a choisi des implĂ©mentations qui sont clairement distinct (sauf pour les blocs de textes, mais ça n'a pas toujours Ă©tait le cas ça montre que ce n'est pas ce qui le conduit).
Avec l'organisation actuelle de l'écosystÚme, il me paraßt normal de voir des langages arriver et faire des choses cool et d'avoir un java qui prends son temps et qui par contre a un développement couplé avec celui de la jvm, du jdk et des gc.
Quand JetBrain prends une dĂ©cision et quand Amber prends une dĂ©cision, ça ne prends pas le mĂȘme temps et ça n'a pas le mĂȘme impact.
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: Java 15, le nouveau Kotlin ? (mais un peu en retard quand mĂȘme)
Posté par SpaceFox (site web personnel, Mastodon) . Ăvalué à  4.
Pour plusieurs raisons :
Et ça nâest pas une question dâimplĂ©mentation mais clairement de fonctionnalitĂ©s : en terme de fonctionnalitĂ©s, Java rattrape Kotlin. Tout mon propos est lĂ : en tant que dĂ©veloppeur et dâutilisateur au quotidien du langage, ça fait plaisir de voir que Java ne stagne plus comme il a pu le faire Ă plusieurs Ă©poques, et se dĂ©cide Ă intĂ©grer les bonnes idĂ©es qui viennent dâailleurs dans la «âŻcommunautĂ©âŻÂ».
La connaissance libre : https://zestedesavoir.com
[^] # Re: Java 15, le nouveau Kotlin ? (mais un peu en retard quand mĂȘme)
Posté par barmic 𩩠. Ăvalué à  5.
Alors oui, mais j'ai pas l'impression que ça se maintienne tant que ça. Android c'est trĂšs particulier, puisque ça n'est pas OpenJDK et je crois que ART ne cherche mĂȘme plus Ă coller avec les nouveautĂ©s de Java (l'usage des "nouveautĂ©s" de java8 semble se faire par des extensions). Sur le JDK kotlin avait marquĂ© par gradle qui propose maintenant kotlin comme DSL (mais gradle est Ă©cris en java) et par spring qui le supporte (on parle ici d'avoir des apis pensaient pour un usage idiomatique de spring avec kotlin), mais en soit je ne le vois pas tant dĂ©coller que ça hors Android. Je peux tout Ă fait me tromper, heinâŻ? Et j'apprĂ©cie kotlin, mais je ne le vois pas arriver. Je viens de regarder, Ă©videment ça vaut ce que ça vaut, mais dans le dernier classement tiobe groovy est 17Ăšme, scala 31Ăšme et kotlin 34Ăšme. Pour te donner une idĂ©e rust est 18Ăšme et swift est 12Ăšme pour d'autres langages rĂ©cents.
C'est aussi un peu comme ça qu'a Ă©tait pense groovy avec beaucoup plus d'ambition en terme de nouveautĂ© et un Ă©norme intĂ©rĂȘt pour ĂȘtre vraiment interfaçable avec java (contrairement Ă scala, tu peux utiliser une bibliothĂšque groovy sans te rendre compte que ce n'est pas du java - Ă cause de collections qui n'existe pas dans java collection, de l'utilisation d'idiomes qui n'existent pas en java et qui font bizarre Ă l'usage, etc).
Tu vois ça à partir de quoi�
Ăa a Ă©tait "frĂ©quent" (gradle, android et spring), mais hors de ces 3 exemples qui commencent Ă dater un peu je n'ai pas vu d'autres annonces de ce type passer (mais je suis intĂ©ressĂ© si tu as des exemples).
Ăa a des implications. Les sealed classes sont Ă©crites dans diffĂ©rents fichiers. Si tes classes sont grosses, tu peux trouver ça intĂ©ressant. La contrepartie, c'est que ta classe doit aussi ĂȘtre dĂ©clarĂ©e dans la classe mĂšre ce qui est un peu plus moche (c'est moins DRY). Le pettern matching de java oblige Ă crĂ©er de nouvelles rĂ©fĂ©rences tu ne pourra jamais Ă©crireâŻ:
Ces choix ne sont pas vraiment anodins.
Tout à fait d'accord. Je pense qu'à terme ça aurait posé de graves souci à Java. Comme C++, ils se sont donné un rythme et ça accélÚre les évolutions et c'est vraiment bien.
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: Java 15, le nouveau Kotlin ? (mais un peu en retard quand mĂȘme)
Posté par SpaceFox (site web personnel, Mastodon) . Ăvalué à  3.
Pour lâutilisation de Kotlin, je me base plus sur mon expĂ©rience et surtout ce que je vois de son support un peu partout, que sur des index aussi bancals de TIOBE (dont la courbe contient des sautes impressionnantes et inexpliquĂ©es). Or Kotlin est de plus en plus supportĂ©, depuis les gros et anciens frameworks Ă la mode comme Spring aux nouveaux frameworks Ă la mode comme Quarkus.
Câest tout lâintĂ©rĂȘt de Kotlin : son principe de base, câest dâabord et avant tout dâĂȘtre pratique et agrĂ©able Ă utiliser en leur permettant de se concentrer sur ce qui est important dans le code, pas sur des dĂ©tails type boilerplate («âŻA modern programming language that makes developers happier.âŻÂ» dâaprĂšs eux). Ăa fait hurler les puristes des langages et les chercheurs, mais Ă lâusage dans lâindustrie câest infiniment plus agrĂ©able Ă utiliser que, par exemple, Scala qui lui a une conception orientĂ©e par la thĂ©orie.
La popularité de Groovy par rapport à Kotlin, je la vois à la fois par rapport à mon expérience personnelle et par rapport aux tendances de recherche sur Google.
La connaissance libre : https://zestedesavoir.com
[^] # Re: Java 15, le nouveau Kotlin ? (mais un peu en retard quand mĂȘme)
Posté par ckyl . Ăvalué à  8.
Si tu as un peu de bouteille dans l'industrie et que tu n'écris pas des applications jetables à court terme, la stratégie payante c'est:
C'est long, trÚÚs long mais moins que d'avoir du réécrire sa base de code en 5 langages en 15 ans ou de se retrouver avec un mélange de 3 ou 4 :)
Kotlin ne sera pas différent, dans 2..5 ans il n'aura plus d'avantage trÚs significatif et tu te retrouveras avec une base de code dont tu ne sauras pas quoi faire par ce qu'autant l'interop Java <-> autre c'est pas toujours fou mais l'interop autre1 <-> autre2 c'est la déprime totale.
Bref plus tu fais du back / infra plus le ROI est discutable. AprĂšs ça ne semble pas poser de problĂšme fondamental Ă l'Ă©cosystĂšme JS de réécrire 100 fois mĂȘme choseâŠ
Si tu perds patience, autant partir de la JVM. Android c'est différent, il n'y a pas de choix.
[^] # Re: Java 15, le nouveau Kotlin ? (mais un peu en retard quand mĂȘme)
Posté par YBoy360 (site web personnel) . Ăvalué à  2.
MĂȘme si j'utilise et adore Kotlin (hors d'Android), Groovy a largement plus de lĂ©gitimitĂ© pour avoir la primeur sur ces fonctionnalitĂ©s.
Gradle est un trÚs mauvais exemple de comment faire du Groovy, je pense que ça le dessert plus qu'autre chose. Mais bon, ça lui permet d'avoir une certaine présence.
# C'est pas pour casser l'ambiance
Posté par Maxzor . Ăvalué à  -10.
mais qu'est ce que ce détritut de langage/écosystÚme a à faire avec une revue libriste?
[^] # Re: C'est pas pour casser l'ambiance
Posté par raphj (site web personnel) . Ăvalué à  10.
Parce que c'est un langage populaire avec une ou plusieurs implémentations libres, utilisé par beaucoup de logiciels libres ?
En tout cas 28 points pour la dĂ©pĂȘche suffit Ă montrer qu'il y a de l'intĂ©rĂȘt ici :-)
[^] # Re: C'est pas pour casser l'ambiance
Posté par SpaceFox (site web personnel, Mastodon) . Ăvalué à  10.
Si tu as des vrais arguments contre Java (des qui existent encore en 2020, pas des qui datent de Java 1.4 et de plus de 20 ans) et pas des insultes, je serais curieux de les lire.
Idem pour toute personne qui plusseoierait le message de Maxzor.
La connaissance libre : https://zestedesavoir.com
[^] # Re: C'est pas pour casser l'ambiance
Posté par devnewton đș (site web personnel) . Ăvalué à  3.
Le seul problÚme de Java, c'est qu'il est grassouillet. Espérons qu'il se mette au régime un jour.
Ce post est offensant ? Prévenez moi sur https://linuxfr.org/board
[^] # Re: C'est pas pour casser l'ambiance
Posté par SpaceFox (site web personnel, Mastodon) . Ăvalué à  3.
Yâa eu pas mal dâefforts en ce sens, mais la pratique habituelle ça reste quand mĂȘme dâavoir une JVM avec toutes ses API, ce qui est effectivement souvent lourd pour pas grand-chose.
La connaissance libre : https://zestedesavoir.com
[^] # Re: C'est pas pour casser l'ambiance
Posté par Nicolas Boulay (site web personnel) . Ăvalué à  3.
Java est trĂšs verbeux, donc plus difficile Ă lire. Il n'est pas assez paramĂ©trique ce qui oblige Ă jouer avec des @âŠ, voir des bouts de dĂ©finition en XML Ă cotĂ© du code, ce qui implique lourdeur, et lenteur. Une appli web qui ne fait pas grand chose : 500Mo d'artefact de gitlabâŠ
Le type 'null' est toujours là . Les types de base ne sont pas des objets. Il n'y a pas de notion de layout mémoire, tout objet est "boxé" ce qui implique une grosse quantité de pointeur de partout. Le modÚle "multi-thread" est pas top, ce n'est ni Go, ni Rust.
Les licences entre openjdk et jdk d'Oracle, ne sont pas claire. Et retrouver aujourd'hui, une jvm 8 est compliqué.
âŠ
"La premiÚre sécurité est la liberté"
[^] # Re: C'est pas pour casser l'ambiance
Posté par SpaceFox (site web personnel, Mastodon) . Ăvalué à  5.
Je vois du vrai et de lâobsolĂšte dans ce que tu Ă©cris :
PlutĂŽt faux depuis Java 8. On est trĂšs loin de la verbositĂ© de Java jusquâĂ 1.4 inclus.
Sur un projet moderne, ça fait des annĂ©es que je nâai plus eu Ă configurer quoi que ce soit en XML Ă cĂŽtĂ© du code en Java. Quant Ă la lourdeur et la lenteur incluses parce que «âŻpas assez paramĂ©triqueâŻÂ», je suis rĂ©ellement curieux dâavoir un exemple de ce que tu entends par lĂ (câest une vraie question, pas un troll).
HaâŻ? Tu utilises quoi comme frameworkâŻ? Jâai un projet perso avec Spring Boot + Kotlin + connexion Ă la BDD + gĂ©nĂ©ration de pages en HTML avec Thymeleaf, je rĂąlais parce que le JAR exĂ©cutable (et unique fichier produit) Ă©tait passĂ© de 49 Ă 65 Mo en passant Ă la derniĂšre version de Spring Boot. Câest objectivement gros, surtout quand Quarkus peut produire des binaires natifs beaucoup plus petits (mais sur des piles moins grosses), mais un ordre de grandeur sous ce que tu donnes.
Tout ça, OK (et à mon sens le
nullest peut-ĂȘtre le plus gros problĂšme de Java). Il y avait un projet pour se dĂ©barasser des types de base, mais ça fait longtemps que je nâen ai plus entendu parler.Et du coup ça implique quoi comme problĂšme, vu que tu ne manipules jamais de pointeur en JavaâŻ?
Câest assez vrai, mais Java date de 1996, Go de 2009, Rust de 2010. Les API rĂ©centes ont aussi beaucoup amĂ©liorĂ© lâutilisation des threads, et on trouve des API rĂ©actives tout Ă fait convaincantes et performantes depuis peu.
Câest en effet un problĂšme, de mĂȘme que les incompatiblitĂ©s entre les diffĂ©rents fournisseurs de JVM/JDK (on les rencontre surtout pour les modes graphiques).
10 secondes chrono si tu connais le nom de AdoptOpenJDK (qui est Ă connaitre si tu travailles avec Java).
La connaissance libre : https://zestedesavoir.com
[^] # Re: C'est pas pour casser l'ambiance
Posté par barmic 𩩠. Ăvalué à  4.
Attendons que ces langages aient 10 ans, pour voir apparaĂźtre ce genre de choses (Ă mon avis go y passera et rust non grĂące aux macro). Grosso modo soit tu prĂ©vois de la mĂ©taprogrammation dans ton langage de base soit tu prĂ©vois un mĂ©talangage ou un outillage autour (comme python, C, C++, C#,âŠ).
Les records sont entre autre là pour ça.
openjdk c'est du gplv2 je vois pas la complexité. Je vois pas en quoi la notion de distribution est compliquée pour des gens habitués à leurs distributions linux.
Je vois pas la difficulté.
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: C'est pas pour casser l'ambiance
Posté par Nicolas Boulay (site web personnel) . Ăvalué à  1.
Ou est le jdk 8 dans la page OpenJDKÂ ?
"La premiÚre sécurité est la liberté"
[^] # Re: C'est pas pour casser l'ambiance
Posté par barmic 𩩠. Ăvalué à  2.
OpenJDK ne fais pas de distribution. C'est comme aller sur la lkml pour tĂ©lĂ©charger linux. Tu peux mais du coup il faut comprendre que tu rĂ©cupĂšre une archive d'un dĂ©pĂŽt. Donc pour openjdk, tu clique sur mercurial puis sur jdk8 et tu va pouvoir rĂ©cupĂ©rer le jdk8 en bz2, zip ou gz. Ce n'est pas facile, mais dis-toi que tu va mĂȘme devoir le compiler ton JDK. Encore une fois c'est comme d'aller chercher ton noyau sur lkml.org
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: C'est pas pour casser l'ambiance
Posté par Nicolas Boulay (site web personnel) . Ăvalué à  1.
On est bien d'accord, il n'y a pas de package de jdk sur openjdk. Donc, pourquoi en parler ?
"La premiÚre sécurité est la liberté"
[^] # Re: C'est pas pour casser l'ambiance
Posté par barmic 𩩠. Ăvalué à  4.
Parce que je ne vois pas ce que tu entend par "on trouve plus le jdk8" tous les endroits oĂč on peut logiquement chercher en parlent dĂšs leur page d'accueil. MĂȘme les moteurs de recherche ont des rĂ©sultats pertinents dans les premiers liens.
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: C'est pas pour casser l'ambiance
Posté par Nicolas Boulay (site web personnel) . Ăvalué à  0.
Ce qui est faux. openjdk ne le propose pas. Le lien oracle propose le jdk oracle.
Il reste l'autre lien qui n'apparaissait pas quand j'avais fait la recherche.
Dire que trouver un openjdk 8 est simple est faux. Il n'est disponible que dans les vieilles distro ou sur https://adoptopenjdk.net/
"La premiÚre sécurité est la liberté"
[^] # Re: C'est pas pour casser l'ambiance
Posté par claudex . Ăvalué à  5.
Il y a deux clics à faire sur adoptopenjdk, je ne vois pas comment tu peux trouver ça compliquer (et c'est le 4e site chez Google chez moi si je tappe "download openjdk 8").
« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
[^] # Re: C'est pas pour casser l'ambiance
Posté par barmic 𩩠. Ăvalué à  3.
Si t'es pas satisfait de ta distro, ce n'est probablement pas la faute du projet upstream1. RHEL possĂšde toujours la version 8 du JDK par exemple. AprĂšs ta distribution a peut ĂȘtre des arguments comme «âŻon ne supporte que la derniĂšre version LTSâŻÂ» ce qui a du sens (tous les projets ne maintiennent pas plusieurs versions LTS en parallĂšle).
les sources sont toujours disponibles, le dernier commit sur le dĂ©pĂŽt a 6 jours donc je prĂ©sume que ta distribution a accĂšs au code Ă jour du JDK â©
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: C'est pas pour casser l'ambiance
Posté par ckyl . Ăvalué à  6. DerniĂšre modification le 24 septembre 2020 Ă 19:12.
Petit résumé de comment fonctionne l'écosystÚme Java:
Oracle JDK correspond Ă ce dernier cas. Pour Java 8 ils ont arrĂȘtez de filer gratuitement un JDK 8 et n'en fournissent plus qu'Ă leur client.
Si tu veux un JDK 8 open source gratuit, il suffit de choisir ton fournisseur:
Je crois que tu n'as juste pas compris comment ça fonctionne et que tu fais beaucoup de vagues pour un petit changement de stratégie de la part d'Oracle JDK.
Pour plus de détails: https://docs.google.com/document/d/1nFGazvrCvHMZJgFstlbzoHjpAVwv5DEdnaBr_5pKuHo/edit
Si tu veux essayez différent JDK il existe l'excellent SDKMAN, https://sdkman.io/jdks
[^] # Re: C'est pas pour casser l'ambiance
Posté par SpaceFox (site web personnel, Mastodon) . Ăvalué à  3.
Jâajoute quâen plus de lâOpenJDK, il y a dâautres JDKâŻalternatifs. Le plus utilisĂ© (et qui reste vraiment un JDK, pas un machin Ă©trange comme GraalVM) est sans doute J9, le JDK dâIBM, qui est rĂ©cemment passĂ© chez la fondation Eclipse.
JusquâĂ Java 6, il Ă©tait sensiblement plus performant que le JDKâŻdâOracle, mais ça nâest plus le cas. Il est obligatoire pour certains produits IBM, et son implĂ©mentation est complĂštement diffĂ©rente, y compris les classes de lâAPI.
La connaissance libre : https://zestedesavoir.com
[^] # Re: C'est pas pour casser l'ambiance
Posté par claudex . Ăvalué à  3.
Moi qui ne suit pas dans l'ecosystĂšme Java, je ne vois pas trop l'intĂ©rĂȘt de J9. Quelqu'un a des arguments pour/contre ?
« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
[^] # Re: C'est pas pour casser l'ambiance
Posté par SpaceFox (site web personnel, Mastodon) . Ăvalué à  3.
Lâargument «âŻpourâŻÂ» Ă©tait tout simplement que pendant longtemps, les produits IBMâŻrefusaient de se lancer (ou se comportaient nâimporte comment) sâils nâutilisaient pas J9âŠ
Si tu Ă©tais riche (parce que la licence nâĂ©tait pas donnĂ©e si tu voulais utiliser J9 autrement que prĂ©-packagĂ© avec un produit IBM) et que tu avais besoin dâun peu plus de performances, jusquâĂ Java 1.5 inclus, ça pouvait ĂȘtre aussi une solution Ă Ă©tudier.
La connaissance libre : https://zestedesavoir.com
[^] # Re: C'est pas pour casser l'ambiance
Posté par barmic 𩩠. Ăvalué à  2.
Ăa me fait penser Ă jrokit (qui fut la premiĂšre Ă faire de dĂ©chargement de classe il me semble) et l'Ă©poque de bea puis d'oracle.
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: C'est pas pour casser l'ambiance
Posté par claudex . Ăvalué à  3.
Mais du coup, il n'y a plus d'arguments actuellement ? (Sans doute pour ça qu'IBM l'a abandonné)
« Rappelez-vous toujours que si la Gestapo avait les moyens de vous faire parler, les politiciens ont, eux, les moyens de vous faire taire. » Coluche
[^] # Re: C'est pas pour casser l'ambiance
Posté par SpaceFox (site web personnel, Mastodon) . Ăvalué à  3.
Aujourdâhui, si tu nâas pas de raison extĂ©rieure impĂ©rative dâutiliser J9, la seule raison que je vois câest pour le plaisir dâutiliser une alternative. Il y a peut-ĂȘtre des cas spĂ©cifiques particuliers oĂč elle est intĂ©ressante, mais de but en blanc je nâen connais pas.
La connaissance libre : https://zestedesavoir.com
[^] # Re: C'est pas pour casser l'ambiance
Posté par ckyl . Ăvalué à  4.
La plaquette commerciale: https://www.eclipse.org/openj9/performance/
En gros ils se positionnent sur une VM un poil plus adaptée aux microservice (footprint un poil plus bas cas et démarrage plus rapide au détriment d'un poil moins de perf en régime de croisiÚre). On reste sur des écarts de quelques pourcents. J'ai pas testé sur des charges réelles.
[^] # Re: C'est pas pour casser l'ambiance
Posté par Nicolas Boulay (site web personnel) . Ăvalué à  1.
C'est encore horrible par rapport Ă d'autre langage (cf le nouveau record).
Tout ce qui concerne spring boot, la gestion d'erreur complexe à comprendre, le fait que cela ne soit plus programmatique. Si on rajoute des générateurs de code à un langage, c'est que les fonctions paramétrique sont trop pauvres.
Je sais, j'étais le premier surpris, c'était un serveur d'API avec connection Kafka (dépendance incluse).
Cela implique beaucoup de lenteurs (les cpu n'aiment pas les indirections mémoires) et beaucoup de consommation mémoire par rapport à une structure identique en C++, par exemple.
Tu penses à quoi ?
J'en étais resté que JavaFX n'était plus géré. Tu penses à autres choses ?
Cela aurait pu me servir il y a quelques temsp :)
"La premiÚre sécurité est la liberté"
[^] # Re: C'est pas pour casser l'ambiance
Posté par SpaceFox (site web personnel, Mastodon) . Ăvalué à  3.
Heu⊠tu est sĂ©rieux lĂ âŻ? Le seul truc de «âŻverbeuxâŻÂ» dans un
record, câest les accolades Ă la fin dont on se demande un peu ce quâelles font lĂ âŻ:On ne peut pas vraiment dire que ça rends le truc illisibleâŠ
La gestion dâerreurs (en particulier les checked exceptions) est connu comme lâune des erreurs de conception du langage, entre autres par certains concepteurs du langage. Je ne comprends pas ce que tu veux dire par «âŻTout ce qui concerne spring boot,âŻÂ» et «âŻle fait que cela ne soit plus programmatique.âŻÂ».
La consommation mĂ©moire, pourquoi pas (et encore, le gros de la consommation mĂ©moire enâŻJava, câest surtout des gens qui ne savent pas sâen servir et qui font des fuites mĂ©moires partout, et qui laissent les paramĂštres Ă des valeurs dĂ©mesurĂ©ment hautes). Les performances⊠Java peut monter franchement haut en performances, notamment pour un langage non compilĂ© en natif.
Concernant les threads, il y a eu le framework Executor et ses évolutions futures, et il me semble que ça a encore été amélioré depuis.
Pour les frameworks recatifs, je pense Ă des choses comme RxJava ou Spring Reactor.
Concernant les différences entre JVM/JDK, quelques exemples ici.
La connaissance libre : https://zestedesavoir.com
[^] # Re: C'est pas pour casser l'ambiance
Posté par Nicolas Boulay (site web personnel) . Ăvalué à  3.
Je voulais dire que record essaye justement de palier le problÚme. Mais ce n'est qu'un paquet de donné.
Si tu code Ă coup de @âŠ, tu ne codes plus vraiment. C'est de la dĂ©claration statique au milieu d'un truc qui est dynamique, et parfois cela marche mal. Et typiquement, comprendre une erreur provenant de lĂ n'est pas simple.
Oui, et une des grosses différences avec C++ est justement cette fragmentation et ces sauts mémoires.
"La premiÚre sécurité est la liberté"
[^] # Re: C'est pas pour casser l'ambiance
Posté par barmic 𩩠. Ăvalué à  6.
Tu as déjà vu une appli qui était grosse donc java fais de grosses appli�
En contrepartie tu évite la fragmentation de la mémoire et le CPU n'aime pas non plus la fragmentation mémoire.
Ce n'est plus dans le JDK, c'est loin d'ĂȘtre mort https://openjfx.io/
Oui quand on suit de loin un Ă©cosystĂšme ça peut paraĂźtre difficile Ă suivre ou comprendre. Mais je ne trouve pas surprenant qu'il faille un peu s'intĂ©resser Ă un sujet pour le comprendreâŠ
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: C'est pas pour casser l'ambiance
Posté par Nicolas Boulay (site web personnel) . Ăvalué à  1.
Java a cette rĂ©putation, qu'un exemple confirme. Mais je serais le seul Ă le penserâŠ
Qu'est-ce que tu veux dire par là  ? La fragmentation mémoire est dû à l'allocation de petit bout de mémoire à la place de gros. Vu que chaque objet est alloué indépendamment dans Java, et qu'une grosse structure de structure est impossible, la mémoire sous Java est bien plus fragmenté et une structure de structure est sous forme de structure de pointeur.
Peut ĂȘtre que tu veux parler de la compaction faite par le GC, mais ce n'est fait que part le code "stop the world" qui est Ă©vitĂ© Ă tout prix.
"La premiÚre sécurité est la liberté"
[^] # Re: C'est pas pour casser l'ambiance
Posté par barmic 𩩠. Ăvalué à  4.
Non la fragmentation est due à la non réutilisation de l'espace libéré. Allouer un grand espace est une technique pour limiter la fragmentation.
Lire la dĂ©pĂȘche que l'on commente peut ĂȘtre une bonne idĂ©e ;)
https://linuxfr.org/users/barmic/journaux/y-en-a-marre-de-ce-gros-troll
[^] # Re: C'est pas pour casser l'ambiance
Posté par Nicolas Boulay (site web personnel) . Ăvalué à  1.
En bref ça :
ne veut rien dire. Gaspiller de la mémoire ne coute rien en temps cpu.
"La premiÚre sécurité est la liberté"
[^] # Re: C'est pas pour casser l'ambiance
Posté par kantien . Ăvalué à  1.
C'est étrange comme projet, j'aurais plutÎt eu l'idée contraire : virer les objets et n'avoir que des types comme ceux de base. :-)
Un type c'est un concept et l'interface d'une classe la définition d'un concept (celui mal fait d'algÚbre sur un concept). Celui qui définit ses concepts comme des classes s'y prend aussi mal que ce qui est reproché dans le texte ci-dessus. Si au lieu de ce théorÚme, on prend le fait qu'un cercle a une circonférence dont la valeur est le diamÚtre multiplié par une constante (Pi) et que l'on met cela dans une méthode d'une classe, alors on définit le cercle comme une quiche sur patte. ;-)
Le problĂšme Ă©tant que, si l'on a que des classes, ce dĂ©faut qui touche Ă la forme des dĂ©finitions, au lieu d'ĂȘtre rare, se retrouve ĂȘtre permanent.
Sapere aude ! Aie le courage de te servir de ton propre entendement. VoilĂ la devise des LumiĂšres.
[^] # Re: C'est pas pour casser l'ambiance
Posté par collinm (site web personnel) . Ăvalué à  3.
plutĂŽt faux, peut-ĂȘtre verbeux mais tellement + simple Ă lire surtout plusieurs mois aprĂšs avoir Ă©crit le codeâŠ. comparativement Ă du ruby ou du c, c++ oĂč tu peux arriver Ă du code concisâŠ. mais tellement difficile Ă lireâŠ. d'ailleurs pas toujours Ă©vident avec les lambdas
www.solutions-norenda.com
# juste une coquille Ă corriger
Posté par srb (site web personnel) . Ăvalué à  1.
swicth->switch[^] # Re: juste une coquille Ă corriger
Posté par BenoĂźt Sibaud (site web personnel) . Ăvalué à  3.
Corrigé, merci.
Suivre le flux des commentaires
Note : les commentaires appartiennent Ă celles et ceux qui les ont postĂ©s. Nous nâen sommes pas responsables.