[ 
https://issues.apache.org/jira/browse/UIMA-4824?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Marshall Schor closed UIMA-4824.
--------------------------------
    Resolution: Fixed

> uv3 change storage model to always use int and ref arrays
> ---------------------------------------------------------
>
>                 Key: UIMA-4824
>                 URL: https://issues.apache.org/jira/browse/UIMA-4824
>             Project: UIMA
>          Issue Type: Sub-task
>          Components: Core Java Framework
>            Reporter: Marshall Schor
>            Assignee: Marshall Schor
>            Priority: Minor
>             Fix For: 3.0.0SDKexp
>
>
> The first design for uv3x supported two different styles of storing data.  
> One style, done for cases where there was no corresponding JCas definition 
> for a feature, was to store the feature value either in _intData or _refData 
> arrays.  The other style was to have a field in the JCas definition for the 
> item; for example, a string value would be stored in a locally declared 
> String field.
> The JCas API would directly get/set the field in this case.  The Plain API 
> would test for a method handle in the Feature Impl, which would be set if 
> there was a JCas field implementation; otherwise it would inherit the general 
> set/get code that used the storage in the _intData or _refData.
> The method handle approach was very efficient - Eclipse single step showed 
> only one step to get the value, and previous testing showed this approach was 
> even JIT - efficient.
> However, running the CasCopier test with and without JCas cover classes 
> showed a large slow-down for the JCas case.  Eventually, the evidence seemed 
> to suggest some kind of memory cache loading issue, perhaps the instruction 
> cache, since each getter / setter (with JCas) was running a different bit of 
> code, whereas the non-JCas was running common code.
> Based on this observation, change the impl to simplify things by always using 
> the array of ints / refs approach to storing data, and change the JCas 
> versions to reference that storage.  As part of this, code the offsets in the 
> JCas class as static final int values computed when the class is loaded.   
> This imposes a restriction in the use case where, under a single class 
> loader, multiple type systems and one set of JCas classes are being used.  
> Add appropriate checks to insure that the static final offset values remain 
> correct when multiple type systems are being used.  Also add checks to insure 
> the JCas type hierarchy is consistent with the UIMA Type system hierarchy, 
> and that the range in the JCas getters is consistent with the UIMA type 
> system range for each feature.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to