我正在學習OSGi,因爲它現在變得很流行了幾天。我使用Linux作爲我的操作系統和OpenJDK作爲開發環境。我在OSGi equinox framwork中創建了幾個bundle A,B,C ..等等。OSGi內存清理
我使用以下命令運行OSGi框架:
java -jar osgi-3.10.0-v20140606-1445.jar -console
現在我安裝並啓動在OSGi控制檯A,B,C ...等束。使用Linux頂部命令我觀察到存儲器和CPU利用率如下:
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
我觀察到我的束的一個說B在引起高的存儲器利用率。我從OSGi中卸載了軟件包B,並再次檢查了內存使用情況。我發現了相同的結果,CPU使用率或內存使用率都沒有變化。
我重新啓動,而不捆B OSGi框架,然後我發現下面的統計
1972 422 root S 214m 43% 0% java -jar osgi-3.10.0-v20140606-1445.jar -console
所以在此之後我才知道捆B,卸載從OSGi的,直到我重新啓動並沒有更新的內存或CPU使用率OSGi框架。
所以有人可能會建議我,在OSGi中卸載軟件包後如何清理內存。
關閉它時插入B是什麼?你的「停止」方法如何? – TMichelsen
@TMichelsen我在插件B中執行一些數據庫操作。當我停止B時,我也關閉了數據庫連接和其他資源。 private void closeConnection()拋出SQLException if(sqlConnection == null || sqlConnection.isClosed()){ return; } sqlConnection.close(); sqlConnection = null; 運行時r = Runtime.getRuntime(); r.freeMemory(); r.gc(); } – Raj
sqlConnection = DriverManager.getConnection(ConfigurationConstants.DATABASE_NAME);這一行導致高內存使用率。我正在使用sqlite數據庫。 – Raj