1. Speicherverlust durch Singleton. , Aufgrund der statischen Eigenschaften des Singletons ist sein Lebenszyklus derselbe wie der Lebenszyklus der Anwendung. Wenn also ein Objekt nicht mehr benötigt wird und das Singleton-Objekt einen Verweis auf das Objekt hat, kann das Objekt nicht mehr benötigt werden normal recycelt, was zu einem Speicherverlust führt.
Lösung: Der Lebenszyklus des Singletons ist so lang wie die Anwendung, um Speicherlecks zu verhindern.
// 使用了单例模式 public class AppManager { private static AppManager instance; private Context context; private AppManager(Context context) { this.context = context; } public static AppManager getInstance(Context context) { if (instance != null) { instance = new AppManager(context); } return instance; } }
2. Speicherverlust bei Verwendung des Containers Speicherverlust bezieht sich auf die Ausführung des folgenden Codes, der nichts mit dem Vektor zu tun hat. Wenn eine GC-Operation auftritt, kann diese Reihe von Objekten nicht recycelt werden. und der Speicherverlust kann hier nur von kurzer Dauer sein, da diese Objekte nach der Ausführung der gesamten method()-Methode immer noch recycelt werden können.
Die Lösung ist sehr einfach: Weisen Sie einfach manuell den Wert null zu:
void method(){ Vector vector = new Vector(); for (int i = 1; i<100; i++) { Object object = new Object(); vector.add(object); object = null; } //...对v的操作 vector = null; //...与v无关的其他操作 }
Das obige ist der detaillierte Inhalt vonSo beheben Sie ein Java-Speicherleck. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!