> 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.
True, but the garbage collector doesn't have to collect everything. So even if you call it directly you can't count on it collecting some or all of the available object. What the doc's say is this: > Runs the garbage collector. Calling this method suggests that the Java virtual machine expend effort > toward recycling unused objects in order to make the memory they currently occupy available for quick > reuse. When control returns from the method call, the virtual machine has made its best effort to > recycle all discarded objects. > The name gc stands for "garbage collector". The virtual machine performs this recycling process > automatically as needed, in a separate thread, even if the gc method is not invoked explicitly. As you can see it'll try, but you can't expect that'll it'll get everything. --mikej -=----- mike jackson [EMAIL PROTECTED] > -----Original Message----- > From: Jake Robb [mailto:[EMAIL PROTECTED]] > Sent: Thursday, February 20, 2003 8:28 PM > To: Tomcat Users List > Subject: Re: OT: Is it ok to close connection in finalize() ? > > > 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]
