Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
今天我想说说这个有趣的问题,这的确是个让人费解的是error
问题来源:
这个问题一般会出在myecplise 和ecplise ,即在java程序还在测试阶段,但是我想如果你的程序export后应该还会遇到这个问题
报错:Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
报错分析:
这个错误的出现主要是java的虚拟机jvm的内存不够了,通俗点儿说就是java程序运行过程中JVM可以调配使用的内存空间的设置(JVM在启动的时候会自动设置Heap size的值,当然这个值是可以手动指定的) 。 而这个问题出现的根源也是比较多,但是一般来说归结为两点:
1、所谓的内存泄漏(怎么泄漏的,自己找原因),导致你的jvm内存不够使用;
2、处理的数据太大(这个是最主要的原因),也就是你的数据处理太多,jvm一下子搞不定了;
解决方法:
针对错误分析给出解决方法
1、对于内存泄漏而言,当然是去查看自己的程序了,查看你的变量的定义,实例化,等等;
2、对于数据量大,主要的处理是增加jvm的大小,分批处理你要处理的数据;
调整jvm (写的太大会曝出 Error occurred during initialization of VM Could not reserve enough space for object heap)
eclipse中的解决办法是:windows->preferences->Java->Installed JARS->edit->Default VM Arguments 这个文本框中输入:-Xms256m -Xmx512m
myecplise中的处理类似,至于这个参数到底多少合适,你如果想从我这儿看到结果那你错了,这个参数的给出是你自己实验的结果,我的不一定适合你,这个也是很多人当遇到问题来寻找方法解决时候的通病,总希望别人给你一个东西那就可以使用了(但是这个只是扬汤止沸,而不是釜底抽薪的做法)
下面介绍釜底抽薪的的做法————对处理数据的分批量处理,这是处理数据的王道,因为数据大所以分开处理(这就跟你拿东西一样,篮子太小拿不来东西,要不换个大点儿的篮子要不你少拿点儿)
PS:
如果看到这儿你还对Java heap space 问题的处理没有头绪那只能说是我的失败了,当然我这里给你的主要是问什么会出现这个问题和解决这个问题的思路,至于具体的方法,你可以 找度娘啊
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space ,希望我可以帮到你。
来源:oschina
链接:https://my.oschina.net/u/1462678/blog/232795