我收到OutOfMemoryError:以下代码的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= new StringBuilder("");
InputStream in = new FileInputStream(new File(file));
br = new BufferedReader(new InputStreamReader(in), 102400);
for (String line; (line= br.readLine()) != null;) {
obj.setLength(0);
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)放在开头或结尾有什么问题?
例外:
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)
答案 0 :(得分:1)
因为已经达到了堆空间的阈值,直到你将对象放在hashmap中(代码中的最后一行没有给出错误)。任何操作(不仅将长度设置为零,而是处理堆的任何其他操作)都将导致heapspace变为outOfMemory。
答案 1 :(得分:1)
增加java的堆空间。
添加-XmX 4096
如果您真的对堆空间使用感兴趣,可以运行位于JDK_HOME / bin目录中的jvisualvm。
答案 2 :(得分:0)
转到cmd(命令行,是的我假设你在windows上;))。
然后准确输入以下内容。
java -Xmx4096
输入
java
以找出您可以执行的所有其他操作。我希望这更清楚。