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