2012-01-25 10 views
7

Rozważ pętlę pracownika, który ma coś takiego:Czy dane niezmienne "wypalają" RAM w D?

... 
auto msg = new immutable(DataWrittenMsg)(bytesWritten); 
masterTid.send(msg); 
... 

Będzie to powoli, ale jeść cały RAM, a czas osiągnie Inf? Lub czy niezmienne dane niezmienne mogą zostać zebrane przez GC?

(Czytam TDPL Ch. 13 i mam wrażenie raz niezmienna danych jest ustawiony nigdy nie może dostać wyłączony?)

Odpowiedz

10

Nie, GC będzie jeszcze podnieść bez odniesień obiektów, niezależnie od ich constness.

Jeśli chodzi o "raz niezmienne dane jest ustawione, nigdy nie można się rozbroić" - tak jest tylko w sensie logicznym. Zakładając, że bezpieczeństwo twojego programu nie zostanie naruszone, wszystkie niezmienne, przydzielone sterty obiekty, do których twój program ma dostęp, nie zmienią się tak długo, jak długo będą osiągalne, nawet jeśli rzeczywista pamięć pod tym adresem może zostać ponownie wykorzystana, gdy tylko te obiekty staną się nieosiągalne.