做XML解析 指定必须用DOM做 不能用SAX
开始要把文件全部读取到内存 然后各种统计啊现在的XML文件也就是400M左右 电脑只有4G内存
运行没有报 OUTOFMEMORY之类的错误
把XMX XMS之类都设到最大物理内存了。但是运行起来非常非常慢 刚才40分钟没出来结果 实在等不及就关了
请教有没有办法改善的? 或者把内容保存到虚拟内存之类?
并且我也不追求效率。。只要能成功运行一次 让我把结果保存了。就可以了
新人求教 非常感谢

解决方案 »

  1.   

    400M的XML 为什么要求必须用DOM 解析?   要求本身就不合理
      

  2.   

    xms xmx不要设到物理最大值,因为系统需要内存运行的,如果你把内存设这么高,就会不停产生硬盘交换。此外,你的机器是64位系统吗,jre也是64位的吗? 否则不能够设定2G以上的系统。
      

  3.   

    再补充一点,如果有DTD的话, DTD最好弄到本地,不要让系统去网络上找DTD
      

  4.   

    兄弟,还在在这个问题上纠结呢
    已经有同学说了,本身你要求dom解析就是不合理的。
    还有什么功能非得要用某个解析器?重写并不那么难,400M用sax解析,速度是秒杀的。你就是关心所有的数据,那就把所有的tag处理一把,如果你的数据结构有可能超内存,就直接把数据入到数据库之类的做统计,用javaDB也非常的轻量级。另外,64位因为虚拟机并未优化针对64位机器,所以你在64位机上的速度甚至会比32位慢。就算你设定了2G以上的内存,因为32位寻址的缘故,也是用不上。别纠结了,用sax吧
      

  5.   

    这个应该不是内存问题,应该你分析xml有些方法不合理
      

  6.   

    java -Xmx1024M ....其它的不用改!
      

  7.   

    直接把JVM运行内存加大就好了
      

  8.   

    大文件推荐VTD-XML,JDK本身的DOM内存占用太高,100M大致需要450M的空间。
      

  9.   

    400M文件完全加载到内存,估计也就600M左右,时间消耗10s。再做统计那就得看你的算法咋样了,支持xpath。