我有一個應用程序遍歷一定數量的resultSets並查詢來自其他表的每一行的附加信息。Java SQL查詢內存泄漏
粗糙的結構是這樣的:
public void main(String[] args) {
ResultSet result = database.connection.createStatement()
.executeQuery("SELECT * FROM entities");
ArrayList<Entity> entities = new ArrayList<Entity>();
while (result.next() {
Entity entity = EntityFactory.createById(result.getInt("id"));
entities.add(entity);
}
}
// EntityFactory
public static Entity createById(int id) {
StringBuilder sql = new StringBuilder("SELECT * FROM sampling_data WHERE id = ")
.append(id);
ResultSet result = database.connection.createStatement()
.executeQuery(sql.toString());
result.first();
EntityData data = new EntityData(25);
for (int sample = 1; sample <= 25; sample++) {
String sample_R = new StringBuilder("sample_")
.append(sample).append("_R").toString();
String sample_G = new StringBuilder("sample_")
.append(sample).append("_G").toString();
String sample_B = new StringBuilder("sample_")
.append(sample).append("_B").toString();
int r = resultSet.getInt(sample_R);
int g = resultSet.getInt(sample_G);
int b = resultSet.getInt(sample_B);
data.add(r, g, b);
}
return new Entity(data);
}
這會導致OutOfMemoryException異常。
我該如何讓循環(或整個方法)更高效地存儲內存?
哦,你需要[VisualVM的(http://visualvm.java.net/)或這樣......多少結果你在'ResultSet中有有'? – yair 2012-04-22 11:48:02
我有VisualVM,它的HeapDump顯示'String'和'char []'用完了大約95%的堆。結果集大約2500行,但將來會變得更大。 – 2012-04-22 11:51:27
在你的主要方法中,你是在查詢這75個'sample_ *'列還是其他列?在數據庫中存儲類似RBG樣本並將每個樣本映射到其自己的對象可能不是最好的方法。你想在這裏實現的總體目標是什麼? – 2012-04-22 11:59:20