JAVA运行 内存不够 程序过于缓慢 有没有办法改善

askfor4 2012-08-01 05:45:19
做XML解析 指定必须用DOM做 不能用SAX
开始要把文件全部读取到内存 然后各种统计啊

现在的XML文件也就是400M左右 电脑只有4G内存
运行没有报 OUTOFMEMORY之类的错误
把XMX XMS之类都设到最大物理内存了。

但是运行起来非常非常慢 刚才40分钟没出来结果 实在等不及就关了
请教有没有办法改善的? 或者把内容保存到虚拟内存之类?
并且我也不追求效率。。只要能成功运行一次 让我把结果保存了。就可以了
新人求教 非常感谢
...全文
630 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
老紫竹 2012-08-03
  • 打赏
  • 举报
回复
java -Xmx1024M ....

其它的不用改!
shizhusz110 2012-08-03
  • 打赏
  • 举报
回复
这个应该不是内存问题,应该你分析xml有些方法不合理
askfor4 2012-08-03
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

引用 17 楼 的回复:

引用楼主 的回复:
做XML解析 指定必须用DOM做 不能用SAX
开始要把文件全部读取到内存 然后各种统计啊

现在的XML文件也就是400M左右 电脑只有4G内存
运行没有报 OUTOFMEMORY之类的错误
把XMX XMS之类都设到最大物理内存了。

但是运行起来非常非常慢 刚才40分钟没出来结果 实在等不及就关了
请教有没有办法改善……
[/Quote]


解决了。。说来非常感谢你的提示啊!我也觉得没道理占用这么大内存
就去检查。。。发现算法都没问题!
结果想起来我蛋疼做了个用户界面!一怒之下 把界面删了。。
然后就成功了! 结贴!
askfor4 2012-08-03
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 的回复:]

java -Xmx1024M ....

其它的不用改!
[/Quote]
为什么是1024呀。。我设置了更大也不行唉。。
askfor4 2012-08-03
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 的回复:]

楼主试试,不行的话可以在联系我
[/Quote]
不行啊 少年。。我都设置了最大不行。。设置内存80% 也不行。。
有办法吗
FFF9527 2012-08-03
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]

引用楼主 的回复:
做XML解析 指定必须用DOM做 不能用SAX
开始要把文件全部读取到内存 然后各种统计啊

现在的XML文件也就是400M左右 电脑只有4G内存
运行没有报 OUTOFMEMORY之类的错误
把XMX XMS之类都设到最大物理内存了。

但是运行起来非常非常慢 刚才40分钟没出来结果 实在等不及就关了
请教有没有办法改善的? 或者把内容保存到虚拟内存之类……
[/Quote]
400M文件完全加载到内存,估计也就600M左右,时间消耗10s。再做统计那就得看你的算法咋样了,支持xpath。
FFF9527 2012-08-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
做XML解析 指定必须用DOM做 不能用SAX
开始要把文件全部读取到内存 然后各种统计啊

现在的XML文件也就是400M左右 电脑只有4G内存
运行没有报 OUTOFMEMORY之类的错误
把XMX XMS之类都设到最大物理内存了。

但是运行起来非常非常慢 刚才40分钟没出来结果 实在等不及就关了
请教有没有办法改善的? 或者把内容保存到虚拟内存之类?
并且我也不追求效率。……
[/Quote]
大文件推荐VTD-XML,JDK本身的DOM内存占用太高,100M大致需要450M的空间。
woshisong121 2012-08-03
  • 打赏
  • 举报
回复
楼主试试,不行的话可以在联系我
woshisong121 2012-08-03
  • 打赏
  • 举报
回复
直接把JVM运行内存加大就好了
woshisong121 2012-08-03
  • 打赏
  • 举报
回复
有办法啊
wwwcomcn123 2012-08-02
  • 打赏
  • 举报
回复
不过这个方法很经典!
wwwcomcn123 2012-08-02
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]
哥们 换电脑 !一切问题解决
[/Quote]

换电脑搞不好也一样
chaohua20 2012-08-02
  • 打赏
  • 举报
回复
哥们 换电脑 !一切问题解决
sjlzcj 2012-08-01
  • 打赏
  • 举报
回复
400M的XML 为什么要求必须用DOM 解析? 要求本身就不合理
xu200074212 2012-08-01
  • 打赏
  • 举报
回复
兄弟,还在在这个问题上纠结呢。。。
已经有同学说了,本身你要求dom解析就是不合理的。
还有什么功能非得要用某个解析器?

重写并不那么难,400M用sax解析,速度是秒杀的。你就是关心所有的数据,那就把所有的tag处理一把,如果你的数据结构有可能超内存,就直接把数据入到数据库之类的做统计,用javaDB也非常的轻量级。

另外,64位因为虚拟机并未优化针对64位机器,所以你在64位机上的速度甚至会比32位慢。就算你设定了2G以上的内存,因为32位寻址的缘故,也是用不上。

别纠结了,用sax吧
askfor4 2012-08-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

xms xmx不要设到物理最大值,因为系统需要内存运行的,如果你把内存设这么高,就会不停产生硬盘交换。

此外,你的机器是64位系统吗,jre也是64位的吗? 否则不能够设定2G以上的系统。
[/Quote]
都是64位。。刚才跑了一夜 没出结果。。悲剧
逆天小北鼻 2012-08-01
  • 打赏
  • 举报
回复
重启呗。浏览器别开那么多页
daxiang253 2012-08-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

400M的XML 为什么要求必须用DOM 解析? 要求本身就不合理
[/Quote]
恩恩 同意
cfm2000 2012-08-01
  • 打赏
  • 举报
回复
再补充一点,如果有DTD的话, DTD最好弄到本地,不要让系统去网络上找DTD
cfm2000 2012-08-01
  • 打赏
  • 举报
回复
xms xmx不要设到物理最大值,因为系统需要内存运行的,如果你把内存设这么高,就会不停产生硬盘交换。

此外,你的机器是64位系统吗,jre也是64位的吗? 否则不能够设定2G以上的系统。

62,614

社区成员

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

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