SORU
14 HAZİRAN 2011, Salı


Java XPath (Apache JAXP uygulama) performans

NOT: Eğer bu sorunla karşılaşırsanız, lütfen Apache JİRA üzerinde upvote:

https://issues.apache.org/jira/browse/XALANJ-2540

Bu şaşırtıcı bir sonuca varıyorum:

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

İnanılmaz bir 100 kez daha hızlı gibi görünüyor:

// 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);

JAXP bu JVM varsayılan uygulama kullanıyorum:

org.apache.xpath.jaxp.XPathFactoryImpl
org.apache.xpath.jaxp.XPathImpl

Gerçekten kolay JAXP yukarıda XPath sorgusu aslında getElementsByTagName() basit yerine çalıştırmak için optimize nasıl görmek için, çünkü kafam karıştı. Ama bunu yapmak için görünmüyor. Bu problemi ve API tarafından çekilen gizli sık kullanılan XPath aramalar, yaklaşık 5-6 sınırlıdır. Bu sorguları basit yolları (*13 örneğin*, değişkenler, koşullar) her zaman kullanılabilir bir DOM Belgesi sadece karşı içerir. Eğer bir optimizasyon yapılabilir, çok kolay elde edilecek.

Benim sorum: XPath bu yavaşlık kabul edilen bir gerçektir, falan bakan ben miyim? (Daha hızlı) daha iyi bir uygulama var mı? Ya ben sadece XPath tamamen, basit sorgular için kaçınmalısınız?

CEVAP
14 HAZİRAN 2011, Salı


Ve-örnek testi ve/Xalan JAXP genel olarak benim debug profilli var. Büyük büyük sorunu tespit ettim

org.apache.xml.dtm.ObjectFactory.lookUpFactoryClassName()

10k test XPath değerlendirmeler her bir classloader varsayılan yapılandırma çeşit DTMManager örnek arama için çalışırken led görülebilir. Bu yapılandırma belleğe yüklü değil ama her zaman erişilebilir. Ayrıca, bu erişim ObjectFactory.class kendisini bir kilit tarafından korunuyor gibi görünüyor. Erişim başarısız (varsayılan), o zaman yapılandırma xalan.jar dosya yüklenir

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

yapılandırma dosyası.Her zaman!:

JProfiler profiling results

Neyse ki, bu davranış, bu gibi JVM parametresi belirterek kılınabilir:

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

ya

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

Yukarıda ise fabrika sınıf adı varsayılan her neyse eğer bu lookUpFactoryClassName() pahalı eser atlamasına izin verir gibi çalışır:

// Code from com.sun.org.apache.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 method
      return systemProp;
    }
  } catch (SecurityException se) {
  }

  // [...] "Heavy" operations later

İşte 90 kalibre karşı //SomeNodeName 10k üst üste XPath değerlendirme için performans geliştirme genel bakış XML dosyası (System.nanoTime() ile ölçülür

measured library        : Xalan 2.7.0 | Xalan 2.7.1 | Saxon-HE 9.3 | jaxen 1.1.3
--------------------------------------------------------------------------------
without optimisation    :     10400ms |      4717ms |              |     25500ms
reusing XPathFactory    :      5995ms |      2829ms |              |
reusing XPath           :      5900ms |      2890ms |              |
reusing XPathExpression :      5800ms |      2915ms |      16000ms |     25000ms
adding the JVM param    :      1163ms |       761ms |        n/a   |

kriter çok ilkel olduğunu unutmayın. Peki kendi kriter Sakson xalan daha iyi performans gösteriyor olabilir

Apache: Xalan çocuklar için bir hata olarak bulundular

https://issues.apache.org/jira/browse/XALANJ-2540

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jucyber Tutoriais

    Jucyber Tuto

    8 EYLÜL 2009
  • Photoshop Training Channel

    Photoshop Tr

    13 Temmuz 2012
  • Xbox

    Xbox

    1 Kasım 2005