通过 Writer 写入数百万个字符串是否会成为 java 字符串池的内存和性能问题?

Would writing millions of strings through a Writer be a memory and performance concern for the java string pool?

假设我有这段代码可以将字符串流回具有数百万行数据的客户端。每次写入的所有字符串都会被驻留,从而影响 java 内存吗?如果是这样,为什么在我的情况下会或不会被拘留?

我真的不知道我是否应该在这里使用一个 stringbuilder 来附加我要写的所有东西,然后在最后写它们,或者保持原样

查询将 return 数百万行

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;

        }

没有 String 会在 运行 时被拘留,除非你给他们打电话 .intern() 你不在炸毁实习生池的任何危险。

如果您使用 StringBuilder 组合字符串可能有助于加快速度,但不会对整体内存消耗产生任何影响。一旦您的 BufferedWriterOutputStreamWriter 完成将其写入目的地,您制作的每个字符串都会消失并被遗忘。