Ich lerne OSGi, wie es jetzt ein Tag populär wird. Ich verwende Linux als mein Betriebssystem und OpenJDK als Entwicklungsumgebung. Ich habe einige Bündel A, B, C .. usw. in OSGi-Tagundnachtgleiche framwork erstellt.Speicherbereinigung in OSGi
Ich betreibe Rahmen OSGi unter Befehl:
java -jar osgi-3.10.0-v20140606-1445.jar -console
jetzt habe ich installiert und gestartet A, B, C .. etc Bündel in OSGi-Konsole. Linux-Top-Befehl habe ich Speicher und CPU-Auslastung beobachtet, wie unten:
PID PPID USER STAT VSZ %VSZ %CPU COMMAND
1972 422 root S 368m 74% 3% java -jar osgi-3.10.0-v20140606-1445.jar -console
ich beobachtete, dass einer meines Bündel sagt B hohe Speicherauslastung verursacht wurde. Ich habe das Bundle B von OSGi deinstalliert und erneut die Speichernutzung überprüft. Ich habe das gleiche Ergebnis gefunden, ohne dass sich die CPU-Auslastung oder die Speichernutzung geändert hat.
neu gestartet ich die OSGi-Framework ohne Bündel B dann fand ich die unten
Statistiken1972 422 root S 214m 43% 0% java -jar osgi-3.10.0-v20140606-1445.jar -console
So, nachdem das ich, dass die Deinstallation des Bündel B zu wissen, kam von OSGi nicht auf den Speicher oder die CPU-Auslastung zu aktualisieren, bis ich neu starten das OSGi-Framework.
so kann mir jemand vorschlagen, wie kann ich den Speicher nach der Deinstallation von Bundles in OSGi reinigen.
Was hat PlugIn B, wenn Sie es schließen? Wie ist deine Stop-Methode? – TMichelsen
@TMichelsen Ich führe eine Datenbankoperation in Plugin B durch. Wenn ich B gestoppt habe, schließe ich die Datenbankverbindung und andere Ressourcen. private void closeConnection() löst SQLException { if (sqlConnection == null || sqlConnection.isClosed()) { return; } sqlConnection.close(); sqlConnection = null; Laufzeit r = Runtime.getRuntime(); r.freeMemory(); r.gc(); } – Raj
sqlConnection = DriverManager.getConnection (ConfigurationConstants.DATABASE_NAME); Diese Zeile verursacht die hohe Speicherauslastung. Ich benutze SQLite Datenbank. – Raj