对于包含数百万条记录的循环-java.lang.OutOfMemoryError:java堆空间

对于包含数百万条记录的循环-java.lang.OutOfMemoryError:java堆空间,java,stringbuilder,Java,Stringbuilder,我要退出内存错误:以下代码的Java堆空间: StringBuilder obj= new StringBuilder(""); InputStream in = new FileInputStream(new File(file)); br = new BufferedReader(new InputStreamReader(in), 102400); for (String line; (line= br.readLine()) != null;) { for (i = 0; i &

我要退出内存错误:以下代码的Java堆空间:

StringBuilder obj= new StringBuilder("");
InputStream in = new FileInputStream(new File(file));
br = new BufferedReader(new InputStreamReader(in), 102400);
for (String line; (line= br.readLine()) != null;) {
    for (i = 0; i < 3; i++) {
        for (j = 1; j < 5; j++){ 
            obj.append(line.charAt(j)); 
        }
    }   
    hashMap.put(obj.toString(), someValue);
    obj.setLength(0);
}
StringBuilder obj=新的StringBuilder(“”);
InputStream in=新文件InputStream(新文件(文件));
br=新的BufferedReader(新的InputStreamReader(in),102400);
for(字符串行;(line=br.readLine())!=null;){
对于(i=0;i<3;i++){
对于(j=1;j<5;j++){
obj.append(line.charAt(j));
}
}   
put(obj.toString(),someValue);
对象设置长度(0);
}
但是,

StringBuilder obj=新的StringBuilder(“”);
InputStream in=新文件InputStream(新文件(文件));
br=新的BufferedReader(新的InputStreamReader(in),102400);
for(字符串行;(line=br.readLine())!=null;){
对象设置长度(0);
对于(i=0;i<3;i++){
对于(j=1;j<5;j++){
obj.append(line.charAt(j));
}
}   
put(obj.toString(),someValue);
}
解决了错误吗?将obj.setLength(0)放在开头或结尾有什么问题

例外情况:

Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Unknown Source)
at java.lang.String.<init>(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
线程“main”java.lang.OutOfMemoryError中的异常:java堆空间 位于java.util.Arrays.copyOfRange(未知源) 位于java.lang.String。(未知源) 位于java.io.BufferedReader.readLine(未知源) 位于java.io.BufferedReader.readLine(未知源)
因为在您将对象放入hashmap(代码的最后一行没有给出错误时)之前,heapspace的阈值已经达到。任何操作(不仅将长度设置为零,而且任何其他处理堆的操作)都会导致heapspace变为outOfMemory。

为java增加heapspace

添加
-XmX 4096

如果您真的对堆空间使用感兴趣,可以运行JDK_HOME/bin目录中的jvisualvm。

转到cmd(命令行,是的,我假设您在windows上;))

然后准确地键入以下内容

java -Xmx4096
输入以了解您可以做的所有其他事情。我希望这更清楚

java -Xmx4096
java