[
https://issues.apache.org/jira/browse/LUCENE-1186?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Michael McCandless updated LUCENE-1186:
---------------------------------------
Attachment: LUCENE-1186.patch
Re-using a single analyzer should work around this...
As of LUCENE-1383, we now have a CloseableThreadLocal, and we've used
it instead of ThreadLocal in many places inside Lucene.
However, Analyzer still uses ThreadLocal, because it doesn't have a
close() method. I think we should simply add a close() method to
Analyzer, which then closes the ThreadLocal (attached patch).
I plan to commit in a day or two, and back port to 2.4.1.
> [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
>
>
> 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: [email protected]
For additional commands, e-mail: [email protected]