Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Snowcamp - Green Java

Sandrine Banas
February 02, 2024
77

Snowcamp - Green Java

Sandrine Banas

February 02, 2024
Tweet

Transcript

  1. Impacts de la fabrication d’un ordinateur portable https://ecotopie.fr/numerique-responsable/pollution-dun-ordinateur-anatomie-dun-desastre- ecologique-et-social/ 800

    kgs de matières premières Environ 20 métaux et terres rares 22 kgs de produits chimiques 1,5 tonne d’eau 73% de l’empreinte carbone
  2. L’obsolescence logicielle correspond à la diminution des possibilités d’usage d’un

    appareil numérique (smartphone, tablette, ordinateur, etc.) en raison de l’indisponibilité ou du dysfonctionnement d’un logiciel. Obsolescence logicielle
  3. Obésiciel “Le poids moyen d’une page web a été multipliée

    par 155 en 27 ans.” Ecoconception Web - Frédéric Bordage
  4. Ecoconception numérique Le principe d’écoconception numérique est de prendre en

    compte des aspects écologiques dans la conception de produits ou de services numériques en réduisant leurs impacts environnementaux tout au long de leur cycle de vie.
  5. C R ust C ++ Ada Java JavaScript TypeScript Python

    80 60 40 20 0 Normalized global results for energy
  6. Sustainable packaging pattern Minimiser* la taille de l’application. * Réutilisation/modularité,

    nettoyage des dépendances, clean code, refactoring, éliminez le code mort ou inutilisé (feature flipping)
  7. Waste reduction pattern Minimiser* et purger** régulièrement. * BD: données

    nécessaires (choisir un format et une taille de champ adapté), limiter les envois d’emails (ciblez les destinataires, évitez les PJ) ** Logs, répertoires et fichiers temporaires, fichiers, images docker, données RGPD...
  8. Minimiser* le nombre de d’appels/requêtes et la quantité** d’informations récupérée

    * Utilisez des caches, évitez des appels dans les boucles, circuit breaker... ** Evitez les select *, d’énormes paginations, utilisez des filtres, le max de traitements côté BD... Low impact transportation pattern back to back
  9. Low impact transportation pattern Front to back Minimiser* le nombre

    d’appels à l’API et la quantité** d’informations récupérée. * Design first, limitez les notifications, cache HTTP (header) ou le Front-end web storage, attention au polling (préférez SSE ou websockets)... ** Nommez court, paginez, compressez, GraphQL...
  10. Partagez* les ressources, optimisez** le code et lissez*** la charge.

    * Architecture élastique ** Utilisez les versions Java et des librairies récentes, clean code, microbenchmarks, index BD, explain des query, pool de connexions... *** Traitement asynchrone, queue, batch Efficient energy pattern
  11. Choisir* le lieu et/ou l’heure permettant de faire tourner l’application

    sur de l’énergie verte Limiter les capacités de l’application pour une énergie polluante, débrider pour une énergie verte. Carbon aware pattern *Ex API: Electricity maps ou WattTime
  12. Empreinte mémoire String var1 = getValue(); return var1; return getValue();

    Do not unnecessarily assign values to variables. It increases the use of RAM memory.
  13. Exemples empreinte mémoire libérer les ressources => try with ressources

    ++i plutôt que i++ primitive vs Object => ex Long vs long A venir: les value objects (Valhalla)
  14. public String concatenateStrings(String[] strings) { String result = ""; for

    (String string : strings) { result += string; } return result; }
  15. CPU + mémoire public String concatenateStrings(String[] strings) { String result

    = ""; for (String string : strings) { result += string; } return result; } public String concatenateStrings(String[] strings) { StringBuilder result = new StringBuilder(); for (String string : strings) { result.append(string); } return result.toString(); } Don't concatenate Strings in loop. Use StringBuilder instead. Strings are immutable so each time you concatenate a String, a new String is created. This is a waste of memory and CPU.
  16. public voidfoo() { for (int i = 0; i <

    getMyValue(); i++) { System.out.println(i); } }
  17. CPU public voidfoo() { for (int i = 0; i

    < getMyValue(); i++) { System.out.println(i); } } public voidfoo() { int myValue =getMyValue(); for (int i = 0; i < myValue; i++) { System.out.println(i); } } Do not call a function when declaring a for-type loop in order to avoid function calls each iterations. It saves CPU cycles.
  18. Exemples CPU Eviter d’utiliser des Wrappers sur les primitifs Utiliser

    la bonne Collection pour son besoin JDBC < Spring Data JPA native queries < JPQL* Switch plutôt que if/else Threads virtuels *Tests faits sur une base oracle