【发布时间】:2014-08-18 14:20:51
【问题描述】:
我有这个代码:
public static void main(String[] args) {
System.out.println("Reading file...");
String content = readFile(args[0]);
System.out.println("Done reading file.");
}
private static String readFile(String file) throws IOException {
BufferedReader reader = new BufferedReader( new FileReader (file));
String line = null;
StringBuilder stringBuilder = new StringBuilder();
while( ( line = reader.readLine() ) != null ) {
stringBuilder.append( line );
}
return stringBuilder.toString();
}
readFile 方法适用于小文件。
我注意到它占用了太多内存。
如果我在 Windows 上打开系统监视器 (CTRL-SHIFT-ESC),我看到 java 进程占用了 1.8GB RAM,而我的文件大小只有 550MB。
是的,我知道,将文件完全加载到内存中并不是一个好主意,我这样做只是出于好奇。
当新创建的 java 进程启动时,程序卡在Reading file...,它需要大量的 RAM 并上升到 1.8GB。
我也尝试使用字符串连接而不是使用StringBuilder,但结果完全相同。
为什么要占用这么多内存?是最终的stringBuilder.toString 造成的吗?
【问题讨论】:
-
我也尝试使用字符串连接而不是使用 StringBuilder,但我得到了完全相同的结果。 - 如果使用字符串,我担心结果会更糟跨度>
-
如果您的问题是内存,只需使用扫描仪读取文件