Envoyé par
kawa
Hum, il y a de l'idée. Mais, si l'on pouvait forçer le GC à récolleter unitairement les objets ça serait problématique. Je m'explique: d'une part on ne libère pas UN objet mais potentiellement une grappe d'objet, et d'autre part un des travers qui en découlent directement est une segmentation plus élevée de la mémoire.
Ce pourrait être utile dans le cas d'un comptage simple de référence, en particulier pour les variables locales temporaires et ainsi éviter un peu de travail au GC (le GC n'aurait pas à "surveiller" la référence)...
Je viens de tomber sur cette RFE qui propose quelque chose de similaire en proposant la possibilité de déclarer des variables locales de la manières suivantes :
Object foo = new transient Bar();
Le transient indiquant que la durée de vie de l'objet ne dépassera pas celle de la méthode appellante. Cela impliquerait une destruction + libération de l'objet à la fin de la méthode ou du bloc (comme en C++).
Seulement cela demande beaucoups de modification, car les méthodes devront être adapté pour indiquer si elles acceptent des objets "transient" ou pas... et finalement cela compliquerait beaucoups de chose pour avoir du code sécurisé...
a++
Partager