Bonjour,
Question culture générale:
Je ne comprends pas pourquoi Java a fait le choix de s'en remettre corps et âme a son garbage collector et n'autorise pas les développeurs a utiliser des fonctions comme "delet(this.classe)"
Merci à vous!
Bonjour,
Question culture générale:
Je ne comprends pas pourquoi Java a fait le choix de s'en remettre corps et âme a son garbage collector et n'autorise pas les développeurs a utiliser des fonctions comme "delet(this.classe)"
Merci à vous!
Parce que autoriser un delete, c'est autoriser que l'utilisateur continue d'utiliser l'objet après le delete. Ce qui pose alors problème puisque le programme à alors accès à une zone mémoire qui ne lui est plus attribué, via l'ancienne reference. Viennent alors des problèmes de type corruption de mémoire que java veux rendre impossibles, les problèmes de sécurité, et la difficulté pour le programmeur de savoir si réellement l'objet n'est plus utilisé.
D'abord, java n'est pas le seul langage à utiliser un garbage collector, même .net s'y est mis...
Je ne suis pas d'accord avec toi, le programmeur peut très bien agir pour qu'un objet soit éligible au GC, il suffit de supprimer toutes les références à cet objet... et c'est là que le bât blesse... en est-il capable ? Dans bien des cas, non...
Du coup, ce que te dit tchize_ prend tout son sens. Il vaut mieux utiliser un mécanisme du type GC que de rendre possible une référence sur un objet qui n'existe plus, tu imagines les effets de bord ? Non... et personne ne le peut
Bref, à mon sens, le GC est un très bon mécanisme et personnellement, je ne reviendrais pas dessus.
La plupart de ceux qui le critiquent sont des programmeurs qui viennent du langage C, en oubliant qu'à la base ce langage a été conçu pour écrire un OS (Unix) et en omettant également toutes les "bavures" qu'il autorise quand il est employé par des débutants...
Les concepteurs de Java n'ont pas ajouté d'instruction delete parce qu'ils voulaient justement supprimer cette contrainte du C++.
Aujourd'hui tu as les normes C++11 et C++14, mais le problème du delete existe depuis plus de 30 ans et continuera d'exister.
Ce que tu dois comprendre, c'est qu'avoir l'instruction delete en Java ne servirait à rien parce que ce dernier se débrouille tout seul pour libérer la mémoire. Pour les cas spécifiques le langage t'offre la possibilité de gérer la mémoire d'une autre façon grâce aux types SoftReference ou WeakReference par exemple.
N'hésitez pas à consulter la FAQ Java, lire les cours et tutoriels Java, et à poser vos questions sur les forums d'entraide Java
Ma page Developpez | Mon profil Linkedin | Vous souhaitez me contacter ?Contacter Gokan EKINCI
Partager