Wird dieser Code an dieser Zeile ein Speicherleck verursachen "obj = getObjects (i);"?
Es ist unmöglich zu sagen, sicher. Sie haben uns den Code für getObjects
nicht angezeigt, und es ist möglich (obwohl nicht wahrscheinlich, basierend auf dem Namen der Methode), dass diese Methode einen internen Speicherverlust haben könnte.
jedoch wiederholt Verweise auf eine einfache variable Zuweisung (z.B. obj
) nicht Speicher austreten.
Ich bin nicht sicher, ob die alten Werte von obj freigegeben sind oder ob sie noch den Speicher verwenden.
Es ist nicht so einfach an, dass:
- aus einer Speichermanagementperspektive, die „alten Werte von obj“ Referenzen sind ... keine Objekte.
- Die Objekte, auf die sich diese Referenzen beziehen, werden nicht sofort freigegeben, wenn Sie
obj
eine andere Referenz zuweisen.
- Sie werden schließlich in der Zukunft durch den GC freigegeben werden, sofern:
- genügend Speicherplatz vorhanden ist Druck den GC laufen für den „Raum“, wo die Objekte zugeordnet wurden, und
- zu verursachen nichts anderes verweist auf die Objekte.
Wenn dies ein Speicherleck ist, was ist die richtige Syntax?
Für die Aufzeichnung sind Speicherverluste kein Syntaxproblem.
Die HashMap, die obj auf hinwies, bevor die Zuweisung Müll gesammelt bekommen würde, da es keine Hinweise darauf sein wird, aber es gibt keine Garantie, dass es, sobald die Zuordnung erfolgt passieren wird. Garbage Collection wird schließlich passieren. – Madhusudhan
Bitte verwenden Sie keine Rohtypen wie HashMap. – Madhusudhan