Je vais essayer de vous parlez sur ce post du role de la GC ou Garbage Collector en anglais qui veut dire ramasse miette pour les francophone, son role dans le processus de la gestion de la mémoire surtout dans les langages qui font usage des machines virtuelle pour la compilation du langage, tout bon developpeur doit bien comprendre le processus de la traduction de son code en code machine et comment ce code occupe la mémoire pendant son execution, car connaitre correctement cette procedure augmente votre bagage de coding et vous permet de mieux coder, en passant j'ai parlé ici sur ma page, de la difference entre un langage interpreté et un langage compilé
https://itinnovdesign.com/difference-entre-compilateur-vs-interpreteur-vous-devez-le-savoir
Quand on developpe un logiciel, l'objectif d'utiliser un langage de programmation pour le faire c'est celui de manipuler des données car, ce sont ces données qui en fait constituent l'essentiel de l'application qu'on est entrain de construire que ca soit web, mobile ou desktop, notre role en tant que developpeur, est de manipuler les données à travers des algorithmes pour réaliser ce que notre app est appellée à faire. Manipuler les données signifit qu'on doit pouvoir stocker ses données quelque part et y avoir accès en phase d'execution (runtime en anglais) pour pouvoir les manipuler.
Géneralement, notre application est gerée par le system d'exploitation (OS j'ai parlé du role du sytème d'exploitation ici) , c'est lui qui en quelque sorte attribut la zone de mémoir (la RAM) ou notre application doit stocker les données à manipuler et il y a exactement deux zone ou il le fait : la pile ou stack en anglais et le tas ou heap en anglais..le heap c'est là ou il y a allocation dynamique de la mémoire..pour revenir techniquement terre à terre allouer une mémoir c'est quoi ?
Une application est fait des centaines et milliers de lignes de codes ou le developpeur doit définir des variables de tout type : int, double, string, datetime, etc.. ce sont en fait des variables qui contienent les données qu'on souhaite mettre en mémoire pour notre application et qu'on devra par la suite manipuler à travers des algorithmes, donc quand nous les déclarons, nous sommes indirectement entrain de demander au system d'exploitation, de nous allouer en memoire un espace ou stocké ses données et l'OS en fonction du type de variable peut soit nous faire cette allocation dans le stack (en fait le stack est plus rapide et la plupart de temps, c'est le compilateur qui nous demande cette espace mémoire pour executer les variables locales à nos fonctions et methode), ou le faire dans le heap..le heap c'est là ou il attribut la place pour stocker les objets complexes quand nous instancions par exemple une classe avec le mot clé New, nous somme là indirectement entrain de demander une espace dans le tas donc une allocation dynamique ..quand le system d'exploitation nous donne cette place dans le heap/tas, c'est à nous developpeur , de liberer cette zone memoire une fois qu'on l'a utilisé et qui ne nous sert plus, si on ne libère pas alors que l'espace allouer ne nous sert plus et que notre programme continue de demander l'allocation d'autres zones..à un moment notre application pourra planter et devenir lent voir inutilisable car on sera out of memory comme pour dire mémoire pleine il n'y a plus d'espace à allouer pour votre programme car le system d'exploitation ne vas pas prendre toute la RAM de la machine et attribué seulement à votre application, il doit aussi attribuer aux autres applications qui tournent sur la meme machine.. voilà pourquoi dans les langages comme C et C++ il faut gérer soit meme la desallocation de la mémoire.
Pour palier a ce probleme de gestion efficace de la mémoire, les langages comme java et c# qui utilisent une étape intermediaire pour la compilation basée sur l'utilisation des machines virtuelle (ne confonder pas machine virtuelle pour les langages et machine virtuelle pour les système d'exploitation ce sont deux choses differentes), java utilise la JVM (java virtual machine), c# utilise la CLR (common language runtime) , tous deux sont des machines virtuelles qui en fait sont des applications, qui prennent le code intermediaire à savoir bytecode pour java et intermediate language ou IL pour c# et le compile en runtime on parle de JIT pour dire just in time compilation en anglais ou mieux compilation en directe la la la en terre à terre donc en parole simple, quand le developpeur déclare une variable en java ou c# qui doit aller dans le tas/heap, c'est plutot la machine virtuelle à savoir la JVM pour java ou la CLR pour c# qui s'en occupe donc ce sont elles qui font le trait d'union entre notre application et le system d'exploitation pour l'allocation de la mémoire.. du coup ils ont mis sur pied les GC ou mieux garbage collector ou ramasse miette qui en fait sont des thread (entendu par la des processus) dans lequel il y a des algorithmes qui permettent de parcourir dynamiquement le heap, et d'inspecter les zones mémoire inutilisables par notre application et les libère de manière que l'on puisse l'utiliser pour autres allocations et éviter que notre application plante..voilà ceux à quoi sert les ramasses miettes ou GC donc c'est un peu comme la femme de ménage qui passe chaque matin verifier si il y a du bordel dans la maison et met un peu de l'ordre pour qu'on est toujours une maison propre.
Mais les machines Virtuelles ainsi que le GC apporte aussi leur complessité, car pour que votre code soit exécuter, il faut la présence de la machine virtuelle et de son GC ce qui peut reduire les performances de votre application, voilà pourquoi les applications ecrit directement par exemple en C ou en C++ ou il y a compilation du code directe en code machine ou native est plus rapide et plus performante que les applications ecrit en C# ou java etc.. ou on utilise une machine virtuelle, d'ailleur presque tous les languages aujourdhui sont basés sur l'utilisation des machines virtuelles et la JIT parceque l'utilisation d'une machine virtuelle permet de rendre le langage multiplateforme, donc le meme code peut etre executé sur plusieurs machines/plusieurs processeurs differents en terme d'architecture , il suffit juste que dans la machine en question il y ait une machine virtuelle compatible avec le langage.
Happy Coding
LarrySig Guest
24.05.2024, 18:18
Post: Comment fonctionnent Internement les guichets automatiques ?
Orvilledop Guest
22.05.2024, 00:57
Post: Comment fonctionnent Internement les guichets automatiques ?
Orvilledop Guest
15.05.2024, 16:04
Post: Comment fonctionnent Internement les guichets automatiques ?
Franck Guest
14.05.2024, 19:34
Post: Comment deployer un site web statique sur github?