Please review the thread. The thread local is not the cause of OOM in 1.5 and later JVM, especially give the size of the objects they references.

Manually clearing object references is a waste of code/resources. That is what the GC does...

On Feb 25, 2008, at 8:34 AM, Christian Kohlschütter (JIRA) wrote:


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

Christian Kohlschütter commented on LUCENE-1186:
------------------------------------------------

This issue is rather a prophylactic one -- until now, I have not encountered an OutOfMemoryError or slowdown etc.

However, I think it is a good practice to release all resources as soon as an object is not used anymore. For SegmentReader, this is the case when #close() is called. More, as noted in LUCENE-436, some VMs (also recent ones) indeed seem to have problems when ThreadLocal values are not released, so I think it is not just a cosmetic issue.


[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
           Priority: Minor
        Attachments: LUCENE-1186-SegmentReader.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]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to