You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-dev@lucene.apache.org by "Lance Norskog (JIRA)" <ji...@apache.org> on 2009/01/05 06:41:45 UTC

[jira] Commented: (SOLR-914) Presence of finalize() in the codebase

    [ https://issues.apache.org/jira/browse/SOLR-914?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12660668#action_12660668 ] 

Lance Norskog commented on SOLR-914:
------------------------------------

A note: it is a good practice to use finalize() methods to check that a resource has already been released. It should log an error if the resource has not been released. Finalize() methods are all parked on one queue and that queue can back up. This can eventually cause the app to lock up. This is why it is not good to do I/O actions (like close a database connection) inside the finalize method.

If the method only checks an internal marker, that will not cause a backup.

> Presence of finalize() in the codebase 
> ---------------------------------------
>
>                 Key: SOLR-914
>                 URL: https://issues.apache.org/jira/browse/SOLR-914
>             Project: Solr
>          Issue Type: Improvement
>          Components: clients - java
>    Affects Versions: 1.3
>         Environment: Tomcat 6, JRE 6
>            Reporter: Kay Kay
>            Priority: Minor
>             Fix For: 1.4
>
>   Original Estimate: 480h
>  Remaining Estimate: 480h
>
> There seems to be a number of classes - that implement finalize() method.  Given that it is perfectly ok for a Java VM to not to call it - may be - there has to some other way  { try .. finally - when they are created to destroy them } to destroy them and the presence of finalize() method , ( depending on implementation ) might not serve what we want and in some cases can end up delaying the gc process, depending on the algorithms. 
> $ find . -name *.java | xargs grep finalize
> ./contrib/dataimporthandler/src/main/java/org/apache/solr/handler/dataimport/JdbcDataSource.java:  protected void finalize() {
> ./src/java/org/apache/solr/update/SolrIndexWriter.java:  protected void finalize() {
> ./src/java/org/apache/solr/core/CoreContainer.java:  protected void finalize() {
> ./src/java/org/apache/solr/core/SolrCore.java:  protected void finalize() {
> ./src/common/org/apache/solr/common/util/ConcurrentLRUCache.java:  protected void finalize() throws Throwable {
> May be we need to revisit these occurences from a design perspective to see if they are necessary / if there is an alternate way of managing guaranteed destruction of resources. 

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