XML解析器性能测试

关于本次测试代码:参考这篇博客  http://blog.csdn.net/jarvis_java/archive/2010/10/22/5959098.aspx


测试机器:Intel 双核CPU 2.1GhZ MyEclips1.6 JDK1.6 测试期间未开启其他运用程序

 

由于各种解析器操作代码已在 http://blog.csdn.net/jarvis_java/archive/2010/10/22/5959098.aspx 不在列出

先看JUNIT测试代码:

package com.junit.test; import org.junit.Test; import com.alisoft.nano.bench.Nano; import com.mei.xml.dom4jxml; import com.mei.xml.domxml; import com.mei.xml.jdomxml; public class testXML { private static int measurements = 5; // 测量次数 private static int threads = 5; // 线程数 private int baseNodes = 10;//base节点个数 private int childNodes = 10; //child节点个数 private String xmlPath = "c://22//100000.xml"; //读取XML地址 /** * dom4j创建XML */ @Test public void dom4jCreateXMLTest() { Nano.bench().measurements(measurements).threads(threads).measure( "[DOM4J创建XML--]", new Runnable() { public void run() { new dom4jxml(baseNodes, childNodes).createXML(); } }); } /** * dom创建XML */ @Test public void domCreateXMLTest() { Nano.bench().measurements(measurements).threads(threads).measure( "[DOM创建XML--]", new Runnable() { public void run() { new domxml(baseNodes, childNodes).createXML(); } }); } /** * jdom创建XML */ @Test public void jdomCreateXMLTest() { Nano.bench().measurements(measurements).threads(threads).measure( "[JDOM创建XML--]", new Runnable() { public void run() { new jdomxml(baseNodes, childNodes).createXML(); } }); } //------------------------读取测试 /** * dom4j读取XML */ @Test public void dom4jReadXMLTest() { Nano.bench().measurements(measurements).threads(threads).measure( "[DOM4J读取XML--]", new Runnable() { public void run() { new dom4jxml(baseNodes, childNodes).readXML(xmlPath); } }); } /** * jdom读取XML */ @Test public void jdomReadXMLTest() { Nano.bench().measurements(measurements).threads(threads).measure( "[JDOM读取XML--]", new Runnable() { public void run() { new jdomxml(baseNodes, childNodes).readXML(xmlPath); } }); } /** * dom读取XML */ @Test public void domReadXMLTest() { Nano.bench().measurements(measurements).threads(threads).measure( "[DOM读取XML--]", new Runnable() { public void run() { new domxml(baseNodes, childNodes).readXML(xmlPath); } }); } }

测试条件:5线程 每线程运行5次

 

创建XML测试结果:

  


  当节点增加到 5万以上时 我的机器内存溢出 5线程*5次/线程 按照一个XML 3M 内存严重不足


 后来将线程threads减小到3 测试次数measurements减小到3 

  DOM4J能跑完 DOM和JDOM均内存溢出 但是avg高达300ms

  总和性能来看 DOM4J  > DOM > JDOM


创建XML  avg图:

 

创建XML 内存消耗图:

-------------------------------------------------------------读取测试结果-------------------------------------------------------------------

读取XML测试结果:

 

读取XML avg图

读取XML 内存消耗图:

 

  DOM 和JDOM处理的文档非常小 很容易内存溢出 在开发中,能够碰到需要创建40000个节点以上的例子应该还是非常少的 据说PPS的点播列表XML有12万个节点。

  推荐DOM4J解析XML 从性能和使用上总和考虑

  在小数据量的时候没啥区别 数据多的时候还是DOM4J性能好


  声明:我测试读取5.6M左右的XML内存溢出是因为多线程多次运行 并不代表单个读取会内存溢出

  PS:测试架包是一网友给我的 ,很经典,可测试多线程环境下运行的时间,tps,内存占用量。需要可以联系我 [email protected]

 

你可能感兴趣的:(J2EE探索,XML@JSON,xml,测试,多线程,junit,string,2010)