You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@uima.apache.org by "Dennis Bauer (JIRA)" <de...@uima.apache.org> on 2017/03/01 07:45:45 UTC
[jira] [Commented] (UIMA-5306) Memory Improvement - Unnecessary
leaks
[ https://issues.apache.org/jira/browse/UIMA-5306?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15889697#comment-15889697 ]
Dennis Bauer commented on UIMA-5306:
------------------------------------
Because we're using RutaBasic in our rules, in addition to some own annotations, we cannot simply test this memory behaviour that fast.
The Type-classes contains much static fields. At first glimpse, I would've said, that these Type-classes could have been replaced with a enumeration construct. At least, they consist in all parts expect of their classname. But yes, I think the most of these static variable were located at the CAS implementations in uimaj-core I think.
> Memory Improvement - Unnecessary leaks
> --------------------------------------
>
> Key: UIMA-5306
> URL: https://issues.apache.org/jira/browse/UIMA-5306
> Project: UIMA
> Issue Type: Improvement
> Components: Ruta
> Affects Versions: 2.3.0ruta
> Environment: Windows 10, JVM with -Xmx 1024, Java JDK 1.8., 16gb memory
> Reporter: Dennis Bauer
> Assignee: Peter Klügl
>
> In a productive setup we figured out, that there is a huge memory usage of Ruta itself. With JVisualVM it's easy to see, that there is a relative small amount of arrays of Arraylists but with a high memory consumption (250k instances result in 243 000 000 byte memory that are reserved)
> The problem is, that in a clustered SaaS environment with less memory, these arrays block relevant space in memory. A deeper look into these Arrays of Arraylist let suggest the class org.apache.uima.ruta.type.RutaBasic
> A look at this class show three arrays that are instanced with the max. possible value, that can be returned by the typesystem of CAS.
> {code:Java}
> private int[] partOf = new int[((TypeSystemImpl) getCAS().getTypeSystem()).getLargestTypeCode()];
> private Collection<?>[] beginMap = new ArrayList<?>[((TypeSystemImpl) getCAS().getTypeSystem())
> .getLargestTypeCode()];
> private Collection<?>[] endMap = new ArrayList<?>[((TypeSystemImpl) getCAS().getTypeSystem())
> .getLargestTypeCode()];
>
> {code}
> In this improvement should be done an dynamic allocation of memory usage for these arrays, so the total memory consumption would be reduced.
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)