我正在使用Files.readAllLines阅读大约2000个文本文件,但它消耗了100MB。
这是代码段
Charset charset = Charset.forName("ISO-8859-1");
try {
Files.readAllLines(Paths.get(fileName), charset);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JVM需要100MB +才能读取2000个文件。 (我查看了JVisualVM) 我在这做错什么吗?
答案 0 :(得分:1)
好吧,你有1000个文本文件;并且您的代码将它们全部读入内存。因此,创建了许多带字符串的列表。
如果您不想要所有这些 - 为什么使用将文件读入内存的方法?
或者,给出一个具体的答案:你的代码很好(当然,假设你的真实代码确实有类似的东西
List<String> allTheLines = Files...
因为读取所有这些文件并将其内容转储到......无处不太有意义。
从这个意义上说,你在这里做的确不多。除非您确定实际上不想在内存中使用所有行,否则有一些有趣的方法可以执行此操作,请参阅此处查看一些Java8代码。