2010-02-02 66 views
0

我在一個Java程序中使用SQLite。在運行java程序時,會向數據庫發送多個查詢,並在內存中創建臨時表,然後刪除(使用DROP)。SQLite Java內存使用增加,直到一個outofmemory異常

問題是,儘管數據庫中各種操作的數量增加,但來自java程序的內存使用量也增加了。結果,該程序在某個時刻崩潰,並且存在一個超出內存的異常。 我使用PRAGMA temp_store = 2來將臨時表保存在內存中,但是在構建另一個表之前我每次都刪除(使用DROP表名)。

這是否必須對數據庫保存的日誌執行任何操作? 我該如何解決這個問題?

回答

3

不用看看你的程序,就不可能說出問題所在。你是否保留了在內存中對數據庫運行的查詢結果?如果您的程序是以這種方式編寫的,並且您擁有多個大型JDBC結果集,並且垃圾收集器無法確定天氣,那麼釋放它們使用的內存是安全的,您可能會很容易導致內存不足。

+0

是的,我在內存中保留結果集來處理它,但我認爲垃圾收集器會在某個時間點收集它。我使用了Runtime.getRuntime()。gc(),但沒有任何區別。我如何明確擺脫結果集? – zhna 2010-02-02 15:47:23

+0

resultSet = null; – Jared 2010-02-02 17:35:05

+0

非常感謝!現在一切正常:) – zhna 2010-02-02 20:40:40