lucene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Robert Starzer (JIRA)" <>
Subject [jira] Commented: (LUCENE-1186) [PATCH] Clear ThreadLocal instances in close()
Date Fri, 27 Feb 2009 17:11:12 GMT


Robert Starzer commented on LUCENE-1186:

you could use e.g. spring and specific spring-bean-scopes [spring isn't the only choice ;-)
(e.g. request/session scope for web apps, thread local scope (via
for none-web apps), or even prototyp scope if nothing
should be reused

the main problem however is that i do not know why ThreadLocal objects are used in lucene;
i somewhere read about synchronization issues, but IMHO only the developer/user knows
if synchronization is really necessary; 

could you please explain to me why/when ThreadLocals are used?

> [PATCH] Clear ThreadLocal instances in close()
> ----------------------------------------------
>                 Key: LUCENE-1186
>                 URL:
>             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:
For additional commands, e-mail:

View raw message