SAX 
优点:Parsing速度快,内存占用不与XML的大小相联系(可以做到XML涨内存不涨)。 
正确吗?
有例子来证明吗?

解决方案 »

  1.   

     Thread t = new Thread()
     {
     public void run()
     {
     while (true)
     {
     long time = System.currentTimeMillis()
     / (1000 * 60);
     float freeMemory = (float) Runtime.getRuntime()
     .freeMemory() / 1024;
     float totalMemory = (float) Runtime.getRuntime()
     .totalMemory() / 1024;
     logger.info("run time:" + time
     + "minutes:totalMemory:" + totalMemory
     + "K;freeMemory:" + freeMemory + "K");
     try
     {
     Thread.sleep(30 * 1000);
     }
     catch (InterruptedException e)
     {
     e.printStackTrace();
     }
     }
     }
     };
     t.start();
    自己测测看啊。
      

  2.   

    现在遇到的是有个600M的XML文件要解析,如果用dom和VTD—XML,都会出现内存溢出,
    如果采用SAX来解析,还会出现内存溢出吗?
    将来会有更大的XML文件,内存溢出已经成为了瓶颈,用SAX能解决内存溢出吗?
      

  3.   

    http://news.newhua.com/news1/program_net/2009/410/0941010472H2D1I1783HJB2BK06G2I0KCA0EIDIBBE5K645DFICFBBD.html看看这个 有例子
      

  4.   

    这个问题 你要知道dom和sax的区别
    sax是事件驱动的。就是简析一点 然后加载一点  不会一次全都加载到内存里,对于大型xml文档时没问题的
    而dom就是把整个文档全都加载到内存里去,然后生成一个文档树。。dom大了就不行
      

  5.   

    sax 基于事件方式处理,以流的形式读取,理论上来讲对内存的占用比较底。当你的XML文件比较大的时候,sax肯定是首选。但就像你说的内存不涨那是不准确的或者是不可能的,这主要取决于你的实现。
    试想,在扫描一个XML文件时,你经过会读取或处理很多字符串信息,如果你没有处理好这些字符,势必会xiaohao很多内存。jvm对String的处理方式比较特殊,JVM回收也需要一定的时间和成本。总之关键是取决于你如何处理,如果你不做任何处理的话,XML文件大的时候基本不会xiaohao多少内存。
      

  6.   

    补充一句,这与你的XML文档的结构也有很大的关系。XML文档结点的深度越深、XML文档属性越多,内存战用就越多。
      

  7.   

    SAX 的话,主要看看你把解析后的结果做些什么事情,如果把解析结果都放在内存中的话,那内存照样会溢出!
      

  8.   

    最后是,将不同元素的数据写入到不同的excel表中
      

  9.   

    基本上无关,因为DOM是将整个XML文档读入内存并形成一棵树,SAX则是基于事件驱动,侦听到事件消息的时候再从文档中读取。
      

  10.   


    这属于写excel的问题,和 sax 解析无关。
    如果要写的excel中,弄不好数据一大,写excel是比较占内存的。你应该换一个思路,写CSV文本文件是个不错的方法。
      

  11.   

    http://blog.csdn.net/waterwraith/archive/2005/09/13/479361.aspx
      

  12.   

    http://chris-freedream.javaeye.com/blog/376031
      

  13.   

    http://www.java3z.com/cwbwebhome/article/article5/5975.html?id=2076