Будет ли запись миллионов строк через Writer быть проблемой памяти и производительности для пула строк Java?
Допустим, у меня есть этот код, который возвращает обратно строку клиенту с миллионами строк данных. Будут ли интернированы все строки в каждой записи и, таким образом, попадет в память Java? Если так, то почему в моем случае это будет интернировано или нет?
Я действительно не могу сказать, должен ли я использовать строитель строк здесь, чтобы добавить все вещи, которые я собираюсь написать, а затем написать их в конце или просто оставить все как есть
Запрос вернет миллионы строк
try (BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(response.getOutputStream()))) {
writer.write("[");
jdbcTemplate.query(sql, new Object[]{name, age},
rs -> {
try {
writer.write("{\"id1\":" + rs.getInt("id1") + ",");
writer.write("\"id2\":" + rs.getInt("id2") + "}");
} catch (IOException e) {
log.log(Level.ERROR, e);
}
});
writer.write("]");
} catch (IOException e) {
throw e;
}
1 ответ
нет String
S будут интернированы во время выполнения, если вы не позвоните .intern()
на них. Вы не рискуете взорвать внутренний бассейн.
Это может помочь ускорить процесс, если вы соберете StringBuilder
, но это не будет иметь никакого значения в общем потреблении памяти. Каждая строка, которую вы делаете, исчезает и забывается, как только ваш BufferedWriter
а также OutputStreamWriter
закончил писать его по назначению.