You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Romain Manni-Bucau (Jira)" <ji...@apache.org> on 2020/05/06 05:54:00 UTC

[jira] [Commented] (OPENJPA-2814) Memory Leak in ForeignKey class

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

Romain Manni-Bucau commented on OPENJPA-2814:
---------------------------------------------

Hi [~gregjdf], sounds right, do you want to create a PR to fix it?

> Memory Leak in ForeignKey class
> -------------------------------
>
>                 Key: OPENJPA-2814
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2814
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: jdbc
>    Affects Versions: 3.0.0
>            Reporter: Gregory JEVARDAT
>            Priority: Major
>
> I analyzed and solved a memory leak in the ForeignKey class.
>  
> Context is that I run a batch application running as a service and reading billions of entities.
> I realised that ForeignKey classes were accumulating in the heap after each query reading these entities and were never garbaged leading after few hundreds of millions of read and hours of processing to full heap.
> After profiling and debugging the leak is coming from the ForeignKey.join(Column local,Column toPOK) method, more precisely in the line 574 were 
> local.addConstraint(this) is performed.
> Here the ForeignKeys are added to a Set in the Column class. 
> Issue is that the ForeignKey has no equals and hashcode implemented resulting in what it seems to me logically equivalent ForeignKeys added and accumulating indefinitely in the map of Columns. Indeed, for whatever reason a new ForeignKey class is created each time (which also sounds weird) at RelationFieldStrategy.createTranslatingForeignKey method
> Solution: after implementing equals and hashcode in ForeignKey and Constraint class, the application works smoothly and the memory leak is gone. Maybe it should be done for DBIdentifier also ?
>  
>  



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