Comment fonctionne le garbage collector ? - Java - Programmation
Marsh Posté le 01-05-2006 à 16:38:31
C'est pas un time out
http://forum.hardware.fr/hardwaref [...] 3900-1.htm
Marsh Posté le 01-05-2006 à 16:39:49
(avec ça, tu cvas avoir de la lecture pour toute la semaine
Marsh Posté le 24-05-2007 à 14:16:28
Bonjour, j'ai une bête question sur le garbage collecteur :
Un vecteur uniquement référencé par lui même (donc un vecteur qu'on ne sait plus atteindre) sera t'il mangé par le garbage collector ?
Merci
Marsh Posté le 24-05-2007 à 17:43:16
Ben oui, pousquoi ne le serait-il pas?
(c'est un cas trivial de référence circulaire, et tous les GC un tant soit peu modernes -- càd tous les GCs ayant moins de 50 ans grosso merdo -- sont capables de les gérer)
Marsh Posté le 24-05-2007 à 17:51:07
Slt tt le monde,
Voilà ce que je connais sur le GC :
pour chaque zone mémoire allouée, le gc compte le nombre de reférences vers cette zonne. et à chaque fois qu'il y une reference de plus le compteur est inscrémenté et il décrementé à chaque fois qu'il y a une reference de moins.
Et quand le compteur de references passe à zéro, la zone mémoire n'est plus pointée donc le gc peut récupérer la mémoire.
Merci à tous ! bonne aprem
Marsh Posté le 24-05-2007 à 18:21:50
masklinn a écrit : Ben oui, pousquoi ne le serait-il pas? (c'est un cas trivial de référence circulaire, et tous les GC un tant soit peu modernes -- càd tous les GCs ayant moins de 50 ans grosso merdo -- sont capables de les gérer) |
Sauf les navigateurs web
Marsh Posté le 24-05-2007 à 18:37:10
0x90 a écrit : Sauf les navigateurs web |
Même eux, le problème de memleak d'IE n'est pas lié à un garbage collector unique mais au fait que dans IE les objets JS "vivent" dans le moteur JScript alors que les objets DOM vivent dans un moteur COM, et ont des wrappers JScript pour être accessible en JS.
Sauf que le moteur JScript a son GC, et que le moteur COM a le sien et qu'ils fonctionnent totalement séparément.
Chacun dans son coin n'a aucun problème à gérer les références circulaires, mais quand tu as une référence circulaire entre des objets JScript et des objets COM (par exemple dès que tu ajoutes des évènements -- en JScript -- sur un objet du DOM -- vivant dans le moteur COM), aucun moteur n'est capable de "voir" la circularité (le GC JScript voit une référence sur l'un de ses objets venant du moteur COM et le GC COM voit une référence sur l'un de ses objets venant du moteur JScript, mais ils n'ont pas la possibilité d'aller plus loin), et là paf memleak
Marsh Posté le 24-05-2007 à 18:41:57
masklinn a écrit : Même eux, le problème de memleak d'IE n'est pas lié à un garbage collector unique mais au fait que dans IE les objets JS "vivent" dans le moteur JScript alors que les objets DOM vivent dans un moteur COM, et ont des wrappers JScript pour être accessible en JS. |
Je sais tout ça, mais le résultat est que dans un cas d'utilisation très commun la détection des refs circulaires marche pas
( Et sinon python, ils ont arreté d'avoir des pb de ref circulaires aussi ? )
Marsh Posté le 24-05-2007 à 18:50:36
0x90 a écrit : Je sais tout ça, mais le résultat est que dans un cas d'utilisation très commun la détection des refs circulaires marche pas |
Oui mais contrairement à ton sous-entendu ce n'est pas un problème lié à l'implémentation d'un GC, mais à l'interaction de deux GC différents
0x90 a écrit : ( Et sinon python, ils ont arreté d'avoir des pb de ref circulaires aussi ? ) |
Ca fait un moment
Marsh Posté le 24-05-2007 à 18:52:35
masklinn a écrit : Oui mais contrairement à ton sous-entendu ce n'est pas un problème lié à l'implémentation d'un GC, mais à l'interaction de deux GC différents |
Bah c'est un défaut de leur implémentation respective pourtant pas bien compliqué à résoudre
masklinn a écrit : |
Chavais pas
Marsh Posté le 24-05-2007 à 18:53:48
0x90 a écrit : Bah c'est un défaut de leur implémentation respective pourtant pas bien compliqué à résoudre |
Lol
Il est pas compliqué à résoudre, faut juste réimplémenter tout le DOM dans le moteur JScript quoi, facile
Marsh Posté le 24-05-2007 à 19:12:42
masklinn a écrit : Lol |
Marsh Posté le 24-05-2007 à 19:25:11
Ptin c'est d'une clarté
C'est fait avec Dia non?
La fonction que tu appelles à l'étape 1, c'est une fonction jscript ou com?
Accessoirement, si c'était aussi simple ça aurait déjà été fait je pense
Il y a des masses de problèmes qui peuvent se présenter, genre le fait que les deux engins ont des GCs aux stratégies complètement différentes, que je doute que l'interface COM spécifie la possibilité de faire interragir les moteurs de GCs, que le problème n'est pas qu'entre le JScript et le DOM mais aussi entre le JScript et le VBScript, entre le JScript et le CLR, entre le VBScript et le CLR, ...
Marsh Posté le 24-05-2007 à 19:30:05
masklinn a écrit : Ptin c'est d'une clarté |
Implémentée en COM (simple parcours du domaine d'objets COM jusqu'a cul de sac ou justement, arrivée sur un objet Jscript qui est renvoyé). et appelé par jscript.
Note que j'ai pris Jscript comme "maitre" dans l'illustration, mais suffit qu'un des deux l'implémente pour faire péter les cycles, et ça pourrait aussi bien être COM.
( c'est fait avec Inkscape )
Marsh Posté le 24-05-2007 à 20:07:12
0x90 a écrit : Implémentée en COM (simple parcours du domaine d'objets COM jusqu'a cul de sac ou justement, arrivée sur un objet Jscript qui est renvoyé). et appelé par jscript. |
Ben ouais mais fonctionnellement ça implique de faire des modifs majeures au GC (rien que le fait de pouvoir ignorer des références entrantes...)
0x90 a écrit : |
Ben t'es franchement mauvais
Marsh Posté le 24-05-2007 à 20:13:45
masklinn a écrit : Ben ouais mais fonctionnellement ça implique de faire des modifs majeures au GC (rien que le fait de pouvoir ignorer des références entrantes...) |
Déja nettement moins que de réflechir tout le DOM dans jscript comme tu l'a initialement proposé
Si tu prends en compte la compétence supposée d'un mec à qui on demande de coder le GC d'un browser, coder la fonction du schéma dans le ptit wrapper COM-JS et faire la différence entre le multiset des fils de A et le multiset retourné par l'appel à cette fonction, c'est franchement pas grand chose
masklinn a écrit : |
T'es pas patron, t'as pas droit aux beaux slides
Marsh Posté le 24-05-2007 à 20:37:32
masklinn a écrit : Ben oui, pousquoi ne le serait-il pas? |
Parceque le Gc a plus faim ?
Merci pour la réponse.
Marsh Posté le 01-05-2006 à 16:36:14
Techniquement parlant, comment il fonctionne ? À moins d'un timeout sur les objets, je ne vois pas comment ce processus peut "deviner" si un objet n'est plus uilisé.
Et si c'est un timeout c'est mal fait selon moi, car mon programmes pourrait bien utiliser un objet à un moment donné et utiliser cet objet de nouveau seulement au moment d'une action précise, alors le programme risquerait de planter, car le ramasse-miettes à déjà passé.