[
https://issues.apache.org/jira/browse/DAFFODIL-3092?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Olabusayo Kilo resolved DAFFODIL-3092.
--------------------------------------
Resolution: Fixed
Fixed in d902f94427ac45796b501586e33ef71134f4ca0b
> NS.apply(String) reparses a URI on every call causing avoidable allocation
> --------------------------------------------------------------------------
>
> Key: DAFFODIL-3092
> URL: https://issues.apache.org/jira/browse/DAFFODIL-3092
> Project: Daffodil
> Issue Type: Improvement
> Components: Performance, Unparsing
> Affects Versions: 4.2.0
> Reporter: Olabusayo Kilo
> Assignee: Olabusayo Kilo
> Priority: Major
> Fix For: 4.3.0
>
>
> During unparse, resolving each incoming element name to its
> ElementRuntimeData (NextElementResolver.nextElement, in
> PartialNextElementResolver.scala) calls NS(namespace) once per element
> whenever the infoset source reports
> namespaces, both OnlyOnePossibilityForNextElement.maybeNextElement and
> SeveralPossibilitiesForNextElement.maybeNextElement do this unconditionally.
>
> NS.apply(String) (Namespaces.scala) previously handled every call, including
> repeats of the exact same namespace URI string, by:
>
> 1. Calling URI.create(nsString) to parse the string into a java.net.URI.
>
> 2. Looking that URI up in a uniqueness cache implemented as a
> ReentrantReadWriteLock-guarded WeakHashMap (intended for schema-compile-time
> use, where NS objects are constructed relatively rarely).
>
> Since the same handful of namespace URI strings recur once per element across
> an entire document, every single element paid a full URI parse plus a lock
> acquisition, even though the result was always the same cached NS instance.
> java.net.URI-related allocation was 121 MB on a 100k-element namespaced
> document (10 iterations), entirely attributable to this path.
> Execution-sample profiling on a related unparse benchmark showed URI/NS
> resolution responsible for a double-digit percentage of total sampled CPU
> time on some workloads.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)