You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@uima.apache.org by "Richard Eckart de Castilho (Jira)" <de...@uima.apache.org> on 2020/11/11 07:31:00 UTC

[jira] [Resolved] (UIMA-6276) Potential memory leak in FSClassRegistry

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

Richard Eckart de Castilho resolved UIMA-6276.
----------------------------------------------
    Resolution: Fixed

> Potential memory leak in FSClassRegistry
> ----------------------------------------
>
>                 Key: UIMA-6276
>                 URL: https://issues.apache.org/jira/browse/UIMA-6276
>             Project: UIMA
>          Issue Type: Bug
>          Components: Core Java Framework
>            Reporter: Richard Eckart de Castilho
>            Assignee: Richard Eckart de Castilho
>            Priority: Major
>             Fix For: 3.2.0SDK
>
>
> While looking into solutions for UIMA-6243, I have stumbled across this field in {{FSClassRegistry}}:
> {code}
>  /**
>   * Map from class loaders used to load JCas Classes, both PEAR and non-Pear cases, to JCasClassInfo for that loaded JCas class instance.
>   *   key is the class loader
>   *   value is a plain HashMapmap from string form of typenames to JCasClassInfo corresponding to the JCas class covering that type
>   *     (which may be a supertype of the type name).
>   *     
>   *     Key is JCas fully qualified name (not UIMA type name).
>   *       Is a String, since different type systems may use the same JCas classes.
>   *     value is the JCasClassInfo for that class
>   *       - this may be for that actual JCas class, if one exists for that UIMA type name
>   *       - or it is null, signalling that there is no JCas for this type, and a supertype should be used
>   *         
>   * Cache of FsGenerator[]s kept in TypeSystemImpl instance, since it depends on type codes.
>   * Current FsGenerator[] kept in CASImpl shared view data, switched as needed for PEARs. 
>   */
>  private static final Map<ClassLoader, Map<String, JCasClassInfo>> cl_to_type2JCas = Collections.synchronizedMap(new IdentityHashMap<>());  // identity: key is classloader
> {code}
> It seems to me, that this field is a memory leak, in situations where (lots of) classloaders are dynamically created.
> So the classloaders become the key of the field causing them and probably the classes that were defined through them to never be garbage collected. This could e.g. happen in a situation where PEARs are often installed / uninstalled or where resource managers with lots of different extension classloaders are used.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)