[ 
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)

Reply via email to