lucenenet-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "eyal post (JIRA)" <j...@apache.org>
Subject [jira] Updated: (LUCENENET-106) Lucene.NET (Revision: 603121) is leaking memory
Date Sun, 18 Jan 2009 10:43:02 GMT

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

eyal post updated LUCENENET-106:
--------------------------------

    Attachment: WeakHashTable_ep.zip

Here's my version for review. I decided to go for the other extreme - that is implementing
a fully working WeakHashTable implementing all IDictionary methods. I also decided to implement
it a bit different than Tj's for performance reasons.
All tests are passing with this including Tj's tests and some of my own tests.
How is this implementation different:
1. Fully implements IDictionary according to IDictionary rules (i.e. Add() throws an exception
if the same key is passed twice)
2. Internally uses a regular hashtable with a custom comparer. This means that to search for
a key there is no need to create a WeakKey instance - instead you can search by using the
original key and the comparer does the searching. This increases performance since for regular
access you don't need to create a WeakKey object just to compare it to exisiting keys.
3. Cleanup is called only if a GC occoured. This greatly improves performance since there's
no need to iterate over the entire table trying to clean entries if no GC occoured.

Some of the tests I included are performance tests. Running them on my machines show the following:
	TjWeakHashTable	WeakHashTable
Get	2.5	0.7
Add	2.2	1.9
Contains	2.2	0.65
Remove	4.5	2.5
Replace	2.8	2.8

Please review and let me know if you have any comments

> Lucene.NET (Revision: 603121) is leaking memory
> -----------------------------------------------
>
>                 Key: LUCENENET-106
>                 URL: https://issues.apache.org/jira/browse/LUCENENET-106
>             Project: Lucene.Net
>          Issue Type: Bug
>         Environment: .NET 2.0
>            Reporter: Anton K.
>            Assignee: Digy
>            Priority: Critical
>         Attachments: DIGY-FieldCacheImpl.patch, Digy.rar, luceneSrc_memUsage.patch, Paches
for v2.3.1.rar, WeakHashTable v2.patch, WeakHashTable v2.patch, WeakHashTable+FieldCacheImpl.rar,
WeakHashTable_ep.zip, WeakHashTable_tj.zip, WeakReferences.rar
>
>
> readerCache Hashtable field (see FieldCacheImpl.cs) never releases some hash items that
have closed IndexReader object as a key. So a lot of Term instances are never released.
> Java version of Lucene uses WeakHashMap and therefore doesn't have this problem.
> This bug can be reproduced only when Sort functionality used during search. 
> See following link for additional information.
> http://www.gossamer-threads.com/lists/lucene/java-user/55681
> Steps to reproduce:
> 1)Create index
> 2) Modify index by IndexWiter; Close IndexWriter
> 3) Use IndexSearcher for searching with Sort; Close InexSearcher
> 4) Go to step 2
> You'll get OutOfMemoryException after some time of running this algorithm.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message