У меня есть приложение, которое выполняет итерации по количеству результирующих наборов и запрашивает дополнительную информацию для каждой строки из другой таблицы.Ошибка памяти SQL 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
У меня есть VisualVM, и это HeapDump показывает, что 'String' и' char [] 'используют около 95% кучи.Результирующий набор составляет около 2500 рядов, но в будущем он будет значительно больше. –
В вашем основном методе вы запрашиваете один из этих 75 'sample_ *' столбцов или некоторых других столбцов? Хранить что-то вроде образцов RBG в базе данных и сопоставлять каждую выборку с собственным объектом, возможно, не лучшим образом. Какова общая цель, которую вы пытаетесь достичь здесь? –