And now all these other guys say that using finalize() is bad practice.  I
have to ask... Is it bad practice just for the reasons Mike Jackson
described, or does the use of finalize() in general actually cause problems
with the JVM?  I've not heard that before.  The 1.4 API makes no mention of
any issues.

Details on issues with finalize() would be appreciated, if that is indeed
the case.

-Jake


Jake Robb wrote:

> I apologize for not being familiar with this, but I have some insight to
> offer.  Bear with me:
> 
> Is ConnCache your own class (i.e., did you write it)?  If it is, I'd put a
> call to close() in the finalize method of that ConnCache, not GeneralConn.
> If it's not, I would expect that has already been done.
> 
> If ConnCache not your class, and it does not close its own connection, then
> yes, you're doing it right.  There shouldn't be any issues with that
> approach.
> 
> finalize() is indeed guaranteed to run upon garbage collection, which in
> turn is guaranteed to happen.  However, garbage collection can happen at any
> time, so the connection may not be closed immediately.  If this is an issue
> for you, you can call System.gc() to force it to garbage collect
> immediately.
> 
> -Jake
> 
> 
> 
> Rosdi bin Kasim wrote:
> 
>> This is a bit off topic.
>> 
>> I am using connection pooling, and in my code, I open all the connection I
>> need in an object constructor.
>> Then I will close this connection in finalize(), which (according to what I
>> read) will be executed during java garbage collect.
>> 
>> --- sample code ------
>> 
>> public class GeneralConn {
>> 
>>  private ConnCache connCache;
>> 
>>  //open connection during object creation
>>  public GeneralConn () {
>>      try {
>>         connCache = ConnCache.getInstance();
>>         dbConn    = connCache.getConnection();  //grab a connection from
>> the connection pool
>>      }catch (Exception e) {
>>             System.out.println("Fail to open connection: " +
>> e.getMessage());
>>      }
>>   }
>> 
>>   //close when this object is destroyed
>>   public void finalize () {
>>       try{
>>           dbConn.close();
>>           dbConn = null;
>>         }catch (Exception e) {
>>             System.out.println("Fail to close connection: " +
>> e.getMessage());
>>         }
>>   }
>> }
>> 
>> Would this be okay? is it guaranteed that finalize() will be executed during
>> garbage collect??
>> 
>> 
>> Regards,
>> Rosdi bin Kasim.
>> 
>> 
>> 
>> 
>> ---------------------------------------------------------------------
>> 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]
> 


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

Reply via email to