新人求助,报错java.lang.outOFmemortError

民族疯 2014-04-19 07:40:13
新人代码写的不规范

说明:程序主要是统计一个文件里面字符出现的频率,并保存在ArrayList<Letter>里面

/////////////字符类/////////////////
public class Letter
{

private char charName; //字符名
private int times; //字符出现的次数
private double weight; //字符权值

public Letter()
{
times = 0;
weight = 0;
}

public char getCharName()
{
return charName;
}
public void setCharName(char charName)
{
this.charName = charName;
}
public int getTimes()
{
return times;
}
public void setTimes(int times)
{
this.times = times;
}
public double getWeight()
{
return weight;
}
public void setWeight(double weight)
{
this.weight = weight;
}
public double getTimesPlus()
{
return times++;
}

}


/////////////////////字符信息类/////////////////////
import java.util.ArrayList;
import java.util.Iterator;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.File;
public class LetterInformation
{
private int n; //字符的种类
private double sum; //字符的总数
private ArrayList<Letter> letters; //存储字母信息

public LetterInformation()
{
n = 0;
sum = 0.0;
letters = new ArrayList<Letter>();
letters.ensureCapacity(250);
}

public void getWeight() //获得各字符权值大小
{
for (int i = 0; i< letters.size() ; i++)
{
int t = letters.get(i).getTimes();
letters.get(i).setWeight(t/sum);
}
}

public void readLetter(File src) //初始化letters
{
try(
BufferedInputStream fr = new BufferedInputStream(new FileInputStream(src));
)
{
if (!fr.markSupported())
{
System.out.println("mark/reset not supported!");
}
int c = fr.read();
char ch = (char)c;
Letter temp = new Letter(); //临时存放字符
temp.setCharName(ch);
letters.add(temp); //读取文件的第一个字符
fr.mark(1);
fr.reset();
n++;
while ((c = fr.read())!= -1)
{
Letter tp = new Letter();
ch = (char)c;
int tag = 0;
for (int i = 0; i < letters.size(); i++)
{
if ((letters.get(i)).getCharName() == ch)
{
letters.get(i).getTimesPlus(); //相同字符就累加1
sum++;
tag = 1;
}
if (tag == 0) //不同的字符就存在链表中
{
n++;
tp.setCharName(ch);
tp.getTimesPlus();
letters.add(temp);
sum++;
}
}
}
}
catch (IOException ex)
{
ex.printStackTrace();
}
getWeight();
}
public ArrayList<Letter> getLetters()
{
return letters;
}
public int getN()
{
return n;
}
public static void main(String[] args)
{
LetterInformation lif = new LetterInformation();
lif.readLetter(new File("test.txt"));
}
}


报错:


Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOf(Arrays.java:2245)
at java.util.Arrays.copyOf(Arrays.java:2219)
at java.util.ArrayList.grow(ArrayList.java:242)
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:216)
at java.util.ArrayList.ensureCapacityInternal(ArrayList.java:208)
at java.util.ArrayList.add(ArrayList.java:440)
at LetterInformation.readLetter(LetterInformation.java:67)
at LetterInformation.main(LetterInformation.java:90)
请按任意键继续. . .



这是咋回事呢?

...全文
246 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Z-ero 2014-04-20
  • 打赏
  • 举报
回复
那就不清楚了,还是菜鸟一个.不过楼主可以手动关流试试,如果还是这样就不是关流的问题了
民族疯 2014-04-20
  • 打赏
  • 举报
回复
大神都去哪儿了?
民族疯 2014-04-20
  • 打赏
  • 举报
回复
求大神,求大神.....!!!!1
民族疯 2014-04-19
  • 打赏
  • 举报
回复
引用 2 楼 demonxiao 的回复:
LZ。。有文件流操作的话,记得close掉。你这个异常是内存溢出了。
java7中这些流都实现了AutoCloseable接口,只要创建时候放在try语句中就可以自动关闭的。。
民族疯 2014-04-19
  • 打赏
  • 举报
回复
引用 1 楼 u014547383 的回复:
内存溢出,这是没关流么?
java7中这些流都实现了AutoCloseable接口,只要创建时候放在try语句中就可以自动关闭的。。
Sean-Xiao 2014-04-19
  • 打赏
  • 举报
回复
LZ。。有文件流操作的话,记得close掉。你这个异常是内存溢出了。
Z-ero 2014-04-19
  • 打赏
  • 举报
回复
内存溢出,这是没关流么?
内容概要:本文围绕基于蜣螂优化算法(DBO)的无线传感器网络(WSN)覆盖优化问题展开研究,提出了一种创新性的智能优化解决方案,并提供了完整的Matlab代码实现。研究首先分析了传统WSN覆盖优化中存在的覆盖率低、能耗不均等问题,随后引入蜣螂优化算法这一新型群体智能算法,通过模拟蜣螂的生物行为机制,构建了适用于传感器节点部署优化的数学模型。文中详细阐述了算法的设计思路、实现步骤及其在提高网络覆盖率、延长网络生命周期方面的有效性,同时通过仿真实验与其他主流优化算法进行了对比,验证了所提方法的优越性。; 适合人群:具备一定优化算法基础和Matlab编程能力,从事通信工程、物联网、智能优化等相关领域的研究生及科研人员。; 使用场景及目标:①解决无线传感器网络中节点部署不合理导致的覆盖盲区问题;②提升网络整体覆盖性能与资源利用效率;③为智能优化算法在实际工程中的应用提供可复现的研究案例和技术参考。; 阅读建议:建议读者结合文中的Matlab代码进行实践操作,重点关注算法参数设置、适应度函数设计及仿真结果分析部分,同时可尝试将该算法迁移至路径规划、资源调度等其他优化场景中进行拓展研究。
已经博主授权,源码转载自 https://pan.quark.cn/s/a4b39357ea24 在信息技术领域,特别是软件编程行业,微软公司推出的集成开发环境(IDE)Visual Studio,凭借其卓越的功能和广泛的适用范围,成为了众多程序员的常用工具。不过,在实际操作期间,用户可能会遭遇各种挑战,其中一种较为普遍的挑战是“Visual Studio遭遇了异常情况,这或许与某个附加组件有关”。本文将详细研究这一现象的成因、潜在后果以及最终的应对措施。 ### 原因剖析 Visual Studio通过支持多种插件和附加组件来扩展其功能,这些组件通常由第三方开发者设计,旨在为用户提供更多个性化和专业化的工具。然而,这些插件的质量良莠不齐,部分可能未经过充分的测试或与特定版本的Visual Studio存在兼容性难题,从而在执行时引发异常。异常的出现可能源于以下几个因素: 1. **代码缺陷**:若附加组件中的代码存在逻辑问题或资源管理不当,就可能导致运行时异常。 2. **资源竞争**:多个插件同时占用相同的资源(例如内存、文件句柄等),可能会产生资源冲突,进而触发异常。 3. **依赖不匹配**:插件可能需要特定版本的库或框架,如果系统中安装的版本不一致,也可能导致异常。 4. **安全隐患**:部分插件可能存在安全漏洞,一旦被恶意利用,可能会导致更严重的问题,包括但不限于异常崩溃。 ### 后果分析 当Visual Studio遇到由附加组件引发的异常时,不仅会中断当前的工作进程,降低开发效能,还可能带来以下潜在风险: 1. **数据遗失**:若异常发生在保存操作之前,可能会导致未保存的工作内容遗失。 2. **稳定性减弱**:频繁的异常会导致Visual Stud...

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧