对于包含数百万条记录的循环-java.lang.OutOfMemoryError:java堆空间
我要退出内存错误:以下代码的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 &
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