通过 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
组合字符串可能有助于加快速度,但不会对整体内存消耗产生任何影响。一旦您的 BufferedWriter
和 OutputStreamWriter
完成将其写入目的地,您制作的每个字符串都会消失并被遗忘。
假设我有这段代码可以将字符串流回具有数百万行数据的客户端。每次写入的所有字符串都会被驻留,从而影响 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
组合字符串可能有助于加快速度,但不会对整体内存消耗产生任何影响。一旦您的 BufferedWriter
和 OutputStreamWriter
完成将其写入目的地,您制作的每个字符串都会消失并被遗忘。