You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@uima.apache.org by "Marshall Schor (JIRA)" <de...@uima.apache.org> on 2017/09/15 18:15:00 UTC

[jira] [Commented] (UIMA-5573) uv3 change JCas feature slot initialization to be more lazy

    [ https://issues.apache.org/jira/browse/UIMA-5573?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16168289#comment-16168289 ] 

Marshall Schor commented on UIMA-5573:
--------------------------------------

I found an approach that looks very promising.  I tried it out, manually changing Annotation JCas class, and ran the big growing the CAS test, multiple times - it seems to be equally fast as the current approach for getting / setting features in a Feature Structure.

It introduces a small indirection, that allows the JCas class to load and initialize ahead of the type system commit.  (Of course, you must eventually commit a type system before trying to use the JCas class for a type to make new instances, get/set features).

This indirection is a new one available in Java 7 and 8, and makes use of a new object called a MutableCallSite.  The good news is that the JIT compiler is able to compile-out this indirection, which is why this performs so well.

Unfortunately, the change to do this is somewhat extensive:  JCasGen needs to change, as does the v3-migration tool, to generate the new format.  All the hand-done built-in JCas classes need updating as well.  So it may take a bit of time...

> uv3 change JCas feature slot initialization to be more lazy
> -----------------------------------------------------------
>
>                 Key: UIMA-5573
>                 URL: https://issues.apache.org/jira/browse/UIMA-5573
>             Project: UIMA
>          Issue Type: Improvement
>          Components: Core Java Framework
>    Affects Versions: 3.0.0SDK-alpha02
>            Reporter: Marshall Schor
>            Assignee: Marshall Schor
>            Priority: Minor
>             Fix For: 3.0.0SDK-beta
>
>
> The current implementation of JCas classes requires that a type system associated with a JCas class be committed before the JCas class is loaded.  This causes some existing code to fail, because they're causing a JCas class to be loaded before the type system is committed (see UIMA-5554).  
> The reason for this design in v3 was to enable the computation of the offsets for accessing features in feature structures to be done once and saved in static final int values, for efficiency. 
> Find a new approach, which is as efficient, but is more lazy - allowing JCas classes to be loaded, and later a corresponding type system commit to be run.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)