一段时间以来, Apache Xalan中存在一个令人尴尬的错误,该错误是XALANJ-2540 。 此错误的后果是Xalan每次XPath表达式求值将内部SPI配置文件加载数千次 ,可以很容易地进行如下测量:

这个:

Element e = (Element)document.getElementsByTagName("SomeElementName").item(0);
String result = ((Element) e).getTextContent();

似乎比这快100倍:

// Accounts for 30%, can be cached
XPathFactory factory = XPathFactory.newInstance();// Negligible
XPath xpath = factory.newXPath();// Negligible
XPathExpression expression =xpath.compile("//SomeElementName");// Accounts for 70%
String result = (String) expression.evaluate(document, XPathConstants.STRING);

可以看出,每10k测试XPath评估中的每一项都导致类加载器试图以某种默认配置查找DTMManager实例。 此配置不会加载到内存中,但每次都会访问。 此外,此访问似乎受到ObjectFactory.class本身上锁的保护。 当访问失败时(默认情况下),将从xalan.jar文件的配置文件中加载配置:

META-INF/service/org.apache.xml.dtm.DTMManager

每次!

关于Xalan的分析会议

幸运的是,可以通过指定以下JVM参数来覆盖此行为:

-Dorg.apache.xml.dtm.DTMManager=org.apache.xml.dtm.ref.DTMManagerDefault

要么

-Dcom.sun.org.apache.xml.internal.dtm.DTMManager=com.sun.org.apache.xml.internal.dtm.ref.DTMManagerDefault

上面的方法可以正常工作,因为如果工厂类名称仍然是默认名称,则这将绕过lookUpFactoryClassName()中的昂贵工作:

// Code from c.s.o.a.xml.internal.dtm.ObjectFactory
static String lookUpFactoryClassName(String factoryId,String propertiesFilename,String fallbackClassName) {SecuritySupport ss = SecuritySupport.getInstance();try {String systemProp = ss.getSystemProperty(factoryId);if (systemProp != null) { // Return early from the methodreturn systemProp;}} catch (SecurityException se) {}// [...] "Heavy" operations later

资源资源

上面的文字摘录自我不久前向公众提供的堆栈溢出问题和答案 。 我将其再次发布在我的博客上,以便可以提高社区对于这个相当严重的错误的认识。 请随意在这张票上投票,因为地球上的每个Sun / Oracle JDK都会受到影响: https : //issues.apache.org/jira/browse/XALANJ-2540

当然,向Apache贡献修复程序会更好。

参考: 如何通过我们的JCG合作伙伴 Lukas Eder在JAVA,SQL和JOOQ博客上以因子10倍速提高Apache Xalan的XPath处理器 。

翻译自: https://www.javacodegeeks.com/2013/09/how-to-speed-up-apache-xalans-xpath-processor-by-factor-10x.html

如何以10倍速加速Apache Xalan的XPath处理器相关推荐

  1. xalan_如何以10倍速加速Apache Xalan的XPath处理器

    xalan 一段时间以来, Apache Xalan中存在一个令人尴尬的错误,该错误是XALANJ-2540 . 此错误的后果是Xalan每次XPath表达式求值将内部SPI配置文件加载数千次 ,可以 ...

  2. zw·10倍速大数据与全内存计算

    zw·10倍速大数据与全内存计算 zw全内存10倍速计算blog,早就在博客园机器视觉栏目发过,大数据版的一直挂着,今天抽空补上. 在<零起点,python大数据与量化交易>目录中 htt ...

  3. 打破10倍速软件工程师神话

    作者 | Ari-Pekka Koponen 译者 | 弯月 出品 | CSDN(ID:CSDNnews) 领导们常常为高效的员工而感到自豪.实际上,从长远来看,软件组织中拥有"10 倍速工 ...

  4. 职场高手不会告诉你的10倍速学习心法!解密 “库伯学习圈” 和 “费曼学习法”...

    库伯学习圈,是大卫·库伯(David Kolb)在总结了约翰·杜威(John.Dewey).库尔特·勒温(Kurt Lewin,1890-1947)和皮亚杰经验学习模式的基础之上,提出的经验学习模式, ...

  5. 荟聚NeurIPS顶会模型、智能标注10倍速神器、人像分割SOTA方案、3D医疗影像分割利器,PaddleSeg重磅升级!

    导读 图像分割是计算机视觉三大任务之一,基于深度学习的图像分割技术也发挥日益重要的作用,广泛应用于智慧医疗.工业质检.自动驾驶.遥感.智能办公等行业. 然而在实际业务中,图像分割依旧面临诸多挑战,比如 ...

  6. 横扫6个SOTA,吊打强化学习,谷歌最强行为克隆算法登CoRL顶会,机器人干活10倍速

    谷歌团队在CoRL 2021上提出了一种隐式行为克隆 (Implicit BC) 算法,该方法在7项测试任务中的6项上优于此前最佳的离线强化学习方法(Conservative Q Learning). ...

  7. 字节跳动VP 谢欣:打造10倍速高效组织的秘密!

    来源:混沌大学    作者:字节跳动VP 谢欣 大家好,我是字节跳动副总裁谢欣,今天和大家分享的是飞书背后的组织思考. 过去,我们更多会谈到飞书的产品功能.用户体验.效率提升,但今天,我想细致展开所有 ...

  8. facebook、Netflix 10倍速工程效能提升实践

    工程效能是什么呢?工程效能是研发团队能够持续为用户产生有效价值的效率,包括有效性.效率和可持续性三个方面. 一提到工程效能,大家脑子里马上会浮现持续构建.持续发布.开发流程改进等词汇,往往会忽略有效性 ...

  9. 被字节跳动T4级大佬鄙视了:让你10倍提升认知效率,就这3个方法!

    来源| 技术领导力(ID:jishulingdaoli) 国庆长假前,老K跟一位字节跳动T4级的大佬吃饭,聊到技术人如何快速提升认知的问题.我说,很简单啊,努力到无能为力,拼搏到感动自己......话 ...

最新文章

  1. 多种负载均算法及其 Java 代码实现 --转
  2. 全球及中国阻力损失注射器行业“十四五”发展战略规划分与未来需求预测报告2021-2027年版
  3. mysql pool返回值_Mysql成神之路-InnoDB 的 Buffer Pool
  4. 【数据竞赛】这篇文章送给想要学习特征交叉的朋友。
  5. SM30 - SMOFOBJECT
  6. 安卓突然自动关机 android正在启动,华为手机开机重启后老是显示安卓正在启动优化应用是为什么?...
  7. 《机器学习实战》笔记(02):k-近邻算法
  8. server sql top速度变慢解决方案_SQL Server数据库查询速度慢的原因和解决方法
  9. java %3c%=a%%3e_跪求帮忙解析,急!!!
  10. nginx 日志过滤网络爬虫
  11. spring学习--bean--普通bean与工厂bean(FactoryBean)区别
  12. Migrate to vc8(vs2005)
  13. python怎么引入os模块的函数_Python之OS模块函数
  14. [7.19NOIP模拟测试6]失恋三连(雾 题解
  15. 完全解读 OpenPyXL 设置 Excel 单元格样式
  16. 获取code.google.com上的开源代码的方法
  17. html5 粒子动画效果制作,8款惊艳的HTML5粒子动画特效
  18. 保研科研竞赛宣讲会,我给学弟学妹做宣讲的PPT实例,自我介绍经验分享PPT应该怎么做,PPT模板资料分享,包含哪些部分
  19. vertical-align:middle的深入理解
  20. 程序猿最喜欢说的30句话

热门文章

  1. delphi7存取配置文件与sqlserver数据库连接_SQL Server基础知识概念要点详细讲解
  2. wxml报错原因_C#生成、解析xml文件以及处理报错原因
  3. org.apache.kafka.common.errors.TimeoutException: Topic not present in metadata 解决方法
  4. idea部署maven+javaweb项目到jboss
  5. (转)数据库可靠性/可用性、稳定性RTO/RPO
  6. MySQL的自然联结+外部联结(左外连接,右外连接)+内部联结
  7. Springboot(十):邮件服务
  8. 渴望 英语_渴望订阅– RxJava常见问题解答
  9. 实践与反思_在行动中反思的实践
  10. mysql 死锁监视器_并发基础知识:死锁和对象监视器