如题。我的程序创建了10个线程,程序运行一段时间后就会报错
“Exception in thread "线程名" java.lang.OutOfMemoryEror: Java heap space”
我查了下可以设置eclipse的配置文件改善,不过修改过之后运行一段时间仍然报错。
由于程序终止的条件最后是空闲进程数量=10。这样子程序便无法终止,请问有什么办法解决这个问题呢?
整个代码逻辑是
for(10个数据) { A a = new A(); a.b(data); }
我试过这个方法,给每个for循环一个最大的时间,比如10分钟,如果还没执行完就执行下一个数据操作。但是经过试验发现,如果出现了上述的Exception,下一个数据也无法操作。
现在程序只能执行1小时左右,便会卡住。
请问造成这种情况的原因是什么呢?是因为调用完b方法只会我没有特地去关闭每一个线程吗?如果是,应该怎么实现呢?如果不是,这个地方怎么处理比较好。
只有十个线程处理数据?还是每次都创建10个线程?
十分钟没处理完就处理下一个数据,怎么会抛出异常?处理完数据后,线程是处于挂起状态,还是线程结束了?
线程安全方面,你还需要多考虑考虑
内存泄露,可能是你的的工作方法里创建的线程,对象等东西没有得到释放
解决方法:检查你的程序资源有没有被复用:线程可以用线程池,对象可以用对象池
只有十个线程处理数据?还是每次都创建10个线程?
十分钟没处理完就处理下一个数据,怎么会抛出异常?处理完数据后,线程是处于挂起状态,还是线程结束了?
线程安全方面,你还需要多考虑考虑
只有十个线程处理数据?还是每次都创建10个线程?
十分钟没处理完就处理下一个数据,怎么会抛出异常?处理完数据后,线程是处于挂起状态,还是线程结束了?
线程安全方面,你还需要多考虑考虑
程序设计就有问题,去查查JAVA的 ThreadPoolExecutor,ScheduledThreadPoolExecutor等几个类看看这样作能停止么。
http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html
先用jmap拿到dump文件进行分析看看这样作能停止么。
http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html
看看这样作能停止么。
http://docs.oracle.com/javase/1.5.0/docs/guide/misc/threadPrimitiveDeprecation.html
哈哈,本来以为没有什么来着是吧。版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。