tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Richard S. Huntrods" <huntr...@nucleus.com>
Subject Re: Would like to monitor memory use offline
Date Tue, 12 Aug 2008 16:50:18 GMT
Chris,

>
> | If I close the resultset AND the statement, then the connector
> | should release all the objects created by those two. The connection is,
> | after all, just a pipe between the database and the java code. The
> | connector should not (IMO) be hanging on to statement or resultset
> | objects just because the connection is still in existance.
>
> I completely agree. Two things that I can think of that might be causing
> problems with the Connector itself:
>
> 1. ResultSetMetadata -- use of the metadata methods can cause additional
> queries to be executed, which means more ResultSet objects, Fields, etc.
> I didn't see any use of this in your sample code, so I suspect this is
> not the issue.

OK. I tried closing RSMD's. You can't close them so I just made them 
null. It had no effect, but I'm not surprised since they come from the 
ResultSet and should (in theory) be destroyed when the ResultSet is 
closed (IMO).

HOWEVER - In messing with the code again ...

I FIXED THE PROBLEM!!!!!

Yep - totally fixed (tested and verified).

What I decided to do was to move the close statements (and nulling RSMD) 
into the FINALLY block - it seemed pointless to duplicate code. When you 
must have the close() statements in finally, why put them in the main 
code as well?

So I modified ALL my DBMS methods as follows (just showing the finally 
block):

         finally {
             try {
                 if(resultSet != null) {
                     resultSet.close();
                     resultSet = null;
                 }
                 if(statement != null) {
                     statement.close();
                     statement = null;
                 }
             }
             catch (Exception e) {
             }
         }

In doing this, I found several methods I missed earlier - they were 
update and delete methods that didn't use ResultSet so I had missed 
adding the statement.close().

So once I was done, EVERY METHOD in the DBMS class had appropriate 
closes on resultsets and statements (as appropriate) - all placed in the 
finally block.

Testing proved this to completely fix the memory leak.

Thanks again VERY much for all the advice and assistance!!!

:-)

Cheers,

-Richard

---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: users-unsubscribe@tomcat.apache.org
For additional commands, e-mail: users-help@tomcat.apache.org


Mime
View raw message