L’idée ici n’est pas de faire un remake des livres « 97 things every programmer… »
C’est plutôt une liste non exhaustive des choses qui ne sont pas forcément dites quand on apprend java et qui méritent que l’on s’y attarde pour s’améliorer :

  • Java optimise la gestion de certains types de variable et utilise des « pools » : String pool, Long pool etc,
    Ceci explique plusieurs choses : immutabilité des Strings, comparaison == qui fonctionne avec des objets Long de -127 à 128 mais qui ne fonctionne pas au delà etc
  • Il existe plusieurs garbage collector. Il faut choisir celui qui correspond le plus au comportement de votre application.
    – Serial GC
    – Parallel GC
    – Concurrent Mark Sweep (CMS) Collector
    – G1 Garbage Collector
    – Z Garbage Collector
    – Shenandoah
    Etc.
  • Quand on déclare un objet, on a le choix entre quatre types de références. Pourtant, on utilise toujours le type de références fortes, dite « Strong References ».
    Chaque type de référence interagit différemment avec la gestion mémoire du garbage collector. Il y a donc : Strong References, Weak References, Soft References, Phantom References
  • Quand on débute, on a tendance à récupérer la JVM Hotspot d’Oracle. Or, il existe une multitude de JVM : openJdk, graalVm, openJ9, amazon corretto etc. Chacune a ses spécificités. A choisir en connaissance de cause.
  • La JVM optimise le code au fur et à mesure de ses exécutions. On dit qu’elle a une phase de chauffe. Il est admis qu’il faut compter environ 10 000 exécutions pour une optimisation maximale. Note : je ne sais pas si c’est le cas pour toutes les jvm , cf. point du dessus.
  • Il est possible d’instrumenter le bytecode, c’est à dire modifier le programme java une fois qu’il a été compilé en bytecode. Ceci grâce à des java agent. Ceci peut être utile par exemple pour monitorer les performances de votre code.
  • Les objets « wrapper » des primitives (Long, Integer, Short etc) manipulent en interne les primitives. Si vous n’avez pas besoin des méthodes des objets, n’ayez pas de remords à utiliser directement les primitives, elles sont beaucoup plus rapides à instancier.
  • Les annotations processor sont un outil très puissant. Elles permettent de générer du code java à la compilation (mais pas que, ça peut aussi être des fichiers properties etc. une explication simple
  • Une ArrayList a une taille de 10 par défaut. En interne, java fait des copies de tableaux pour augmenter la taille de la liste. Pour gagner en performance, il vaut mieux indiquer au plus près la taille de la liste à son initialisation (si vous pouvez en avoir une idée évidemment)
  • Attention, si vous développez une application dans un conteneur de servlet, ce dernier fait sa vie concernant le nombre d’instanciations de classes etc. La spec JEE déconseille fortement d’instancier des threads dans une telle application.
  • L’opérateur de comparaison && va s’arrêter d’évaluer une expression lorsqu’un des membres de l’expression retourne faux.
    L’opérateur & va évaluer tous les membres de l’expression. Idem pour || et |
  • La programmation orientée aspect, les annotations et l’api reflection sont des sujets à étudier pour tirer le meilleur parti de java (Les frameworks tel que Spring en utilise beaucoup).

Voilà, j’espère que ce « top » changera de ce que l’on trouve habituellement sur le net et qu’il vous sera utile.

N’hésitez pas à nous dire ce que vous en pensez en commentaire.

Partager sur les réseaux