MyException - 我的异常网
当前位置:我的异常网» J2SE » 没有析构函数,这个功能如何实现? 小弟我考,是小

没有析构函数,这个功能如何实现? 小弟我考,是小弟我傻,还是java傻(2)

www.MyException.Cn  网友分享于:2013-02-02  浏览:40次

------解决方案--------------------
什么问题都出来了。
------解决方案--------------------
还有,楼上各位所说的finalize方法,这个方法并不等于C++中的析构函数,C++中的析构函数的调用回收对象内存,但是java中的finalize方法正好相反,这个方法是回收内存时调用。也就是说,java中调用finalize方法根本不是回收内存,你调用它跟调用普通方法没有任何区别,也不能回收掉对象内存,它只是在对象内存回收的时候会被虚拟机调用一次而已。如果你想立即回收内存,你可以调用System.GC()方法来提醒虚拟机,系统内存将要不够,虚拟立即回收垃圾内存,但是垃圾回收器也不会因此回收掉内存,而是等待一个时机来尽快回收掉没有引用的游离对象而已。
如果你真的非常的必要手动来回收一个对象的内存,那么我只能很遗憾的告诉你,java语言机制没有这种能力,java不允许手动回收内存,甚至不允许任何形式的对内存的可控制操作。所以要实现手动回收必须绕过java语言机制来回收内存,也就是使用jni技术用其它有对内存进行可控制操作的语言来完成这种操作,例如C或者C++,可惜遗憾的是,这种做法很打程度上却违背了java的设计初衷,即不可跨平台以及不面向对象了,那么在这里使用java就成为了鸡肋,不如使用更切合的本地语言来实现功能要好得多了。
------解决方案--------------------
是你傻,看看开源的数据库连接池的实现就知道了。里面会对一个连接超过一定时间没有使用,但又没有放回连接池而自动回收这个连接。引句PS名言:只有想不到,没有做不到。
------解决方案--------------------
要用户自己释放

JDK设计Stream,Socket,Connection等类本身都是要用户自己调用Close的,你怕什么,他们不释放那是他们自己的事
------解决方案--------------------
其实如果你用连接池就不会出现这种问题,你在每个方法的开头获得数据库,每个方法的结尾关闭数据库,这样就不会出现三个链接被占用,只是打开了三次链接,关闭了三次连接而已,不过这个地方如果使用了连接池技术,那么这个地方的打开数据库与关闭数据库其实不是真正意义上的打开与关闭,而是获得与归还,即你打开一个数据库的操做其实是你从连接池中获得一个连接,关闭数据库,只是把这个连接归还给连接池,而打开与关闭连接则是有连接池自己管理,连接池要自己判断,如果连接不够用则打开一个新连接,如果某个连接长期不被使用则关掉它,这个是连接池必须实现的一个基本功能,如果你的连接池是自己实现的,那么你必须实现连接池这种自我判断连接的功能。
如果你觉得每个方法都打开和关闭数据库这种方式不好,即使是形式上的你也觉得不爽,那么你可以参考hibernate的一种对连接的管理,即在一个高端去管理连接(例如web应用中的过滤器),即打开与关闭数据库在用户操作级别上去管理,或者应用启用级别上去管理。即你的方法ABC都不管理数据库的关闭与打开,而是想办法把用切面编程的方式,把数据库管理动态织入到业务调用层上(业务调用本身感觉不到以被织入数据库管理),这种方式编程工作量很大,难度也颇高,对于这点spring框架实现得很完美,它在用面向切面的方式对数据库连接以及事务的管理上做得非常好,你可以研究一下。
------解决方案--------------------
探讨
我怎么可能让使用这个类的人,一定要记得调用destory呢,如果忘了,就灾难了。

如果java支持析构函数,在我这个层次上,这个灾难就完全可以避免。

------解决方案--------------------
探讨
引用:

我怎么可能让使用这个类的人,一定要记得调用destory呢,如果忘了,就灾难了。

如果java支持析构函数,在我这个层次上,这个灾难就完全可以避免。

大项目自有高手封装,小软件不释放也无妨,关闭重新打开就好了

------解决方案--------------------
探讨
我觉得在程序开发这个问题上,最好只相信自己,不要相信别人。
把自己做到最好,不要期望别人怎么样。

------解决方案--------------------
数据库连接池还需要别人调用display?
那还叫连接池吗?
------解决方案--------------------
简单的问题,用完切断连接就好了
------解决方案--------------------
学习 NND
------解决方案--------------------
你就不会把数据连接方threadlocal里面啊,最后committe就是了。管他哪里创建的呢。
------解决方案--------------------
很明显的,lz是你傻...连关闭都不用?
难道有了析构你就不用控制了?
------解决方案--------------------
使用Runtime.addShutdownHook添加“关闭钩”
------解决方案--------------------
大家都知道打开一个什么连接时,不需要的时候都会调用close()方法去关闭连接的,打开流是这样,连接数据库也是这样
------解决方案--------------------
路过帮顶,up
------解决方案--------------------
绑定··
------解决方案--------------------
try......catch
觉得这个好,记录日志还方便。
------解决方案--------------------
探讨

文章评论

为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
代码女神横空出世
代码女神横空出世
程序员的鄙视链
程序员的鄙视链
总结2014中国互联网十大段子
总结2014中国互联网十大段子
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
鲜为人知的编程真相
鲜为人知的编程真相
老程序员的下场
老程序员的下场
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
每天工作4小时的程序员
每天工作4小时的程序员
我的丈夫是个程序员
我的丈夫是个程序员
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
如何成为一名黑客
如何成为一名黑客
程序员应该关注的一些事儿
程序员应该关注的一些事儿
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
那些争议最大的编程观点
那些争议最大的编程观点
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
漫画:程序员的工作
漫画:程序员的工作
旅行,写作,编程
旅行,写作,编程
为什么程序员都是夜猫子
为什么程序员都是夜猫子
程序员和编码员之间的区别
程序员和编码员之间的区别
10个调试和排错的小建议
10个调试和排错的小建议
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
程序员必看的十大电影
程序员必看的十大电影
Java程序员必看电影
Java程序员必看电影
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
中美印日四国程序员比较
中美印日四国程序员比较
程序员都该阅读的书
程序员都该阅读的书
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
我是如何打败拖延症的
我是如何打败拖延症的
一个程序员的时间管理
一个程序员的时间管理
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有