2010-09-20 10 views
0

Lorsque vous raisonnez sur le coût d'exécution dans une langue collectée, quel est le coût d'une instruction comme myList = null; en termes de 'n' (le nombre d'éléments dans la liste)? Par souci d'argument, considérez la liste comme étant une liste de types de références à liaison unique sans finalisation requise. Plus généralement, je cherche des informations sur la façon dont le coût d'exécution peut être analysé dans un langage avec GC.Big O analyse du coût d'exécution de récupération de place

Répondre

0

Ma propre pensée est que le coût est susceptible d'être O (1) ou O (n) selon l'implémentation du collecteur. Dans un collecteur de marques et de balayages, les objets inaccessibles ne seront tout simplement pas atteints, donc je pourrais imaginer qu'il n'y a pas de coût associé à les effacer. En fait, dans un simple collecteur de comptage de références, j'imagine facilement qu'il en coûte O (n) pour faire le nettoyage ...

Ce n'est pas évident pour moi comment raisonner à ce sujet lors de la conception des algorithmes ..

0

Je suppose que vous pouvez supposer the amortized costs de cette déclaration à O (1). En pratique, c'est ce que je fais, et je n'ai jamais trouvé de situation qui m'a fait soupçonner cette hypothèse d'être incorrecte.

+0

Les coûts amortis sont certainement juste O (1), car il aurait fallu au moins O (N) pour allouer les objets en premier lieu. Donc, même si le collecteur prend un O (N) pour les effacer, il a déjà été "payé" par les opérations O (N) précédentes nécessaires pour effectuer les allocations. – pauldoo

+0

Ce qui m'intéresse, c'est le coût le plus défavorable de ce relevé, pas le coût amorti. – pauldoo

+1

@pauldoo: Dans le pire des cas, le garbage collector décidera qu'il est temps d'effectuer une collection complète et de balayer tous les objets suivis, ce qui a un coût illimité par une fonction de N. –