[ 
https://issues.apache.org/jira/browse/LUCENE-1186?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12677600#action_12677600
 ] 

Michael McCandless commented on LUCENE-1186:
--------------------------------------------

bq. -> is this true (only for SegmentReader)?

It's true, for all readers (Multi*Readers close the underlying SegmentReaders, 
which then close their ThreadLocals).

bq. is there a reason for the ThreadLocals not being defined as static?

Well... if we made them static then we'd have to further key (internally) on 
the SegmentReader, and then on closing the SegmentReader we'd have to go and 
try to remove those entries somehow.

> [PATCH] Clear ThreadLocal instances in close()
> ----------------------------------------------
>
>                 Key: LUCENE-1186
>                 URL: https://issues.apache.org/jira/browse/LUCENE-1186
>             Project: Lucene - Java
>          Issue Type: Improvement
>    Affects Versions: 2.3, 2.3.1, 2.4
>         Environment: any
>            Reporter: Christian Kohlschütter
>            Assignee: Michael McCandless
>            Priority: Minor
>             Fix For: 2.4.1, 2.9
>
>         Attachments: LUCENE-1186-SegmentReader.patch, LUCENE-1186.patch, 
> LUCENE-1186.patch
>
>
> As already found out in LUCENE-436, there seems to be a garbage collection 
> problem with ThreadLocals at certain constellations, resulting in an 
> OutOfMemoryError.
> The resolution there was to remove the reference to the ThreadLocal value 
> when calling the close() method of the affected classes (see FieldsReader and 
> TermInfosReader).
> For Java < 5.0, this can effectively be done by calling 
> threadLocal.set(null); for Java >= 5.0, we would call threadLocal.remove()
> Analogously, this should be done in *any* class which creates ThreadLocal 
> values
> Right now, two classes of the core API make use of ThreadLocals, but do not 
> properly remove their references to the ThreadLocal value
> 1. org.apache.lucene.index.SegmentReader
> 2. org.apache.lucene.analysis.Analyzer
> For SegmentReader, I have attached a simple patch.
> For Analyzer, there currently is no patch because Analyzer does not provide a 
> close() method (future to-do?)

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


---------------------------------------------------------------------
To unsubscribe, e-mail: java-dev-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-dev-h...@lucene.apache.org

Reply via email to