程序大概如这样:
class X
{
X(){ conn = opendb; }
execute(){}
finalize(){ conn.close(); } main(){
x = new X();
x.execute(...);
}
}但finalize根本无法保证能不能被调用.我打开了一个access数据库作测试, 结果果然发现程序运行完后, 那个作为连接的ldb文件没有被自动删除掉, 真是郁闷! 手动去调用finalize才删掉。既然finalize根本无法保证能否被调用, 还弄出这个方法干嘛啊, 文档上说虽然我们可以有garbage collection, 但还需要用它来关闭socket等. 它都不能被调用了, 还怎么关闭啊!当然,我们可以手动去调用它。那还有什么意义啊,不如写个close函数来的更清晰!更要命的是,我在JSP中用JAVABEAN的形式去用它(SCOPE是SESSION),我哪里知道什么时候该去关闭啊。(难道要在jspDestroy中写?)我学JAVA不久,还不是很懂,是不是java确实无法提供自动的析构呢?
class X
{
X(){ conn = opendb; }
execute(){}
finalize(){ conn.close(); } main(){
x = new X();
x.execute(...);
}
}但finalize根本无法保证能不能被调用.我打开了一个access数据库作测试, 结果果然发现程序运行完后, 那个作为连接的ldb文件没有被自动删除掉, 真是郁闷! 手动去调用finalize才删掉。既然finalize根本无法保证能否被调用, 还弄出这个方法干嘛啊, 文档上说虽然我们可以有garbage collection, 但还需要用它来关闭socket等. 它都不能被调用了, 还怎么关闭啊!当然,我们可以手动去调用它。那还有什么意义啊,不如写个close函数来的更清晰!更要命的是,我在JSP中用JAVABEAN的形式去用它(SCOPE是SESSION),我哪里知道什么时候该去关闭啊。(难道要在jspDestroy中写?)我学JAVA不久,还不是很懂,是不是java确实无法提供自动的析构呢?
解决方案 »
- java中tcp能用多线程实现无阻塞通信吗
- FTP频繁上传抛出异常
- 注册界面
- Java和C/C++/C#/VB/Delphi/Perl/PHP/ASM/哪个好?
- 关于网页解析的问题
- 怎么连oracle数据库 菜鸟初学者简单问题 在线急等
- 急急!!在linux 下如何安装 jdk1.4.2 打什么命令阿
- 一个为似企业QQ的软件(含服务器程序和客户端程序)的Java源码,可以卖多少钱?请指教
- sourceforge站点为什么进不去了? 好多天了!
- **************APPLET与FRAME超级难题**************************
- 请大家提供图形包的信息!
- 实现Socket的通讯,应该怎么做?小女子,TAI各位了。
你这里没有执行这个方法是因为还有对象没有被清空,
看thinking in java,上面有讲
{
X(){ conn = opendb; }
execute(){}
finalize(){ conn.close(); } main(){
x = new X();
x.execute(...);
//---------
x=null;
System.gc();
}
}
x = null;
System.gc();可是这样,似乎还不如直接调用x.finalize()或写一个x.close()直接和方便。2。现在我的意思关键是不想显式地去写个关闭连接的代码或强制回收的代码,想让程序自动去完成关闭连接的调用。这有可能实现吗?3。另外,为什么我的程序已经都退出了,还有对象没有被清空呢?
一般的连接比如数据库、io等都需要自己close
public void destroy();
<jsp:useBean id="x" scope="session" class="X"/>
<%
x.execute(...); // x.close(); // 可我不能在这里close啊,否则设置scope为session就没有什么意义了,而且每次都要在execute前加上connect()或open()
%>是不是这种情况下,创建x对象及最后关闭连接都只有在jspInit和jspDestroy中来写才行呢?