Будет ли запись миллионов строк через 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 закончил писать его по назначению.

Другие вопросы по тегам