付録C.3 XML Processorを効率的に使うためのノウハウ
XML Processorを効率的に使うためのノウハウを次に示します。
-
次のメソッドは内部でスレッドの排他制御を実行します。そのため,複数のスレッドでこれらのメソッドを同時に呼び出した場合,排他待ちが発生してスループットに影響が出るおそれがあります。
-
次のJAXP APIの各ファクトリクラスのnewInstanceメソッド
javax.xml.datatype.DatatypeFactory
javax.xml.parsers.DocumentBuilderFactory
javax.xml.parsers.SAXParserFactory
javax.xml.transform.TransformerFactory
javax.xml.validation.SchemaFactory
javax.xml.xpath.XPathFactory
-
javax.xml.parsers.DocumentBuilderクラスのnewDocumentBuilderメソッド
-
javax.xml.transform.Transformerクラスのtransformメソッド
-
javax.xml.XPathクラスのevaluateメソッド
このうち1.〜2.はオブジェクトを生成するため,処理が比較的重いメソッドです。そのため,メソッドはなるべく頻繁に呼び出さないで,生成したオブジェクトを再利用してください。
-
-
XSLT機能で同じスタイルシートから複数のTransformerを作成する必要がある場合,TransformerFactoryから直接Transformerを作成するよりも,Templatesオブジェクトを1つ作成し,そこから複数のTransformerを作成する方が実行性能面で有利です。
-
XPath機能で同じXPath式を再利用する場合,XPathクラスのcompileメソッドを使ってXPathExpressionオブジェクトを作成し,再利用する方が実行性能の面で有利です。
-
DOM APIを使ってXPath機能と同等の処理を実現できます。実行速度の面ではDOM APIを使った方が有利ですが,入力XML文書の構造に依存した複雑な処理を記述する必要があり,さらにXML文書の構造が変更された場合は処理を書き直す必要があるため,保守性の面ではXPathよりも劣ります。
-
Validation機能の代わりにDOMパーサやSAXパーサでもXMLスキーマを使った検証処理を実現できますが,同じスキーマ文書を使った検証処理を繰り返す場合,スキーマ文書の解析結果をオブジェクトとして再利用できるValidation機能の方が実行性能の面で有利です。
-
JAXBContextオブジェクトの生成処理は負荷が高くなるため,なるべくオブジェクトを再利用した方が実行性能の面で有利です。