100分求解dom4j装载30M左右XML文件
内存溢出代码如下,我是用的sax为什么也会内存溢出?是不是哪里内存没释放,请高手帮忙看看 
 import   java.io.*; 
 import   
java.net.MalformedURLException; 
 import   java.util.Iterator; 
 import   java.util.List;   
 import   org.dom4j.*; 
 import   org.dom4j.io.SAXReader;   
 public   class   ReadAndInsert   { 
 	public   static   void   main(String   args[]) 
 	{ 
 		SAXReader   sax   =   new   SAXReader(); 
 		sax.addHandler( "/DATA/user01 ",   new   UserHandler()); 
 		try   { 
 			sax.read(new   File( "c:/exp/friend.xml ")); 
 		}   catch   (DocumentException   e)   { 
 			e.printStackTrace(); 
 		} 
 	} 
 	public   static   class   UserHandler   implements   ElementHandler 
 	{ 
 		Element   e   =   null; 
 		public   void   onStart(ElementPath   path)   { 
 			e   =   path.getCurrent(); 
 			path.addHandler( "USERID ",   new   NameHandler()); 
 			path.addHandler( "FNAME ",   new   NameHandler()); 
 			path.addHandler( "ORGID ",   new   NameHandler()); 
 			path.addHandler( "ORGNAME ",   new   NameHandler()); 
 			path.addHandler( "FROMORG ",   new   NameHandler()); 
 			System.out.println(path.getPath()+ "*************************** "); 
 			//System.out.println(e.getName()+ ": "+e.getText());     			 
 		} 
 		public   void   onEnd(ElementPath   path)   { 
 			path.removeHandler( "USERID "); 
 			path.removeHandler( "FNAME "); 
 			path.removeHandler( "ORGID "); 
 			path.removeHandler( "ORGNAME "); 
 			path.removeHandler( "FROMORG "); 
 		}  		 
 	} 
 	public   static   class   NameHandler   implements   ElementHandler 
 	{ 
 		Element   e   =   null;   
 		public   void   onStart(ElementPath   path)   {  			 
 			System.out.println(path.getPath()); 
 		} 
 		public   void   onEnd(ElementPath   path)   { 
 		            e   =   path.getCurrent(); 
 			System.out.println(e.getName()+ ": "+e.getText());  			 
 		}  		 
 	}  	 
 }
------解决方案--------------------如果更换了API还是不行的话,我想可能只用调整JVM内存了
------解决方案--------------------首先关掉所有的System.out.println() 
 这个对性能影响很大.
------解决方案--------------------你的web容器是什么 修改一下Xms最大内存 我用jdom读30M以上xml都没问题
------解决方案--------------------曾经用jaxp 定义的标准sax解析过大xml, 对内存基本上没有影响。   
 从楼主遇到的问题来看dom4j的sax并非真正按流的方式解析,而且你outofmemeory的文件大小和内存大小基本也是成比例的。 正好符合dom解析时内存的消耗量,大概是1:10,1M xml文件到用dom解析到内存中是10m左右。   
------解决方案--------------------加大真实内存,我写了一个上传程序,在本地512MB时报内存溢出,把代码上传到2G的服务器,就没事了......
------解决方案--------------------我前些天也遇到到了这样的问题,我是直接用的dom 也抽取网页的信息,在读取1个多G的文件时跑到一半内存有问题报的错就是LZ说的哪个. 
 我的解决方法是,先设置OutOfMemory的异常断点,看出错时jvm里的堆栈情况.在抛出异常的地方顺藤摸瓜.另外,包括我在内的很多人会觉得,字符量不大时String类或容器不会有问题,实际上一个不会有问题,多个则会很占用内存,建议还是从优化程序的设计入手.解决根本问题. 
 那时我的错是两个地方希望对lz有些帮助: 
 1.有和全局的List在整个抽取中不被释放, 
 2.日志文件不是批次写入,而时所有都结束后一次写入,无论总文件有多大. 
 我再次说明,单个的也许不是问题就好比我们一顿饭多次点没