A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 路西法 中级黑马   /  2014-4-1 10:01  /  1234 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

java虚拟机不是有垃圾回收机制吗?那为什么还需要手动的添加finally来关闭资源呢.    各位有空帮我解释一下

3 个回复

正序浏览
本帖最后由 苏伯亚 于 2014-4-2 08:34 编辑

          JVM垃圾回收机制:Java的堆是一个运行时数据区,类的实例(对象)从中分配空间。Java虚拟机(JVM)的堆中储存着正在运行的应用程序所建立的所有对象,这些对象通过new、newarray、anewarray和multianewarray等指令建立,但是它们不需要程序代码来显式地释放。
         一般来说,堆的是由垃圾回收 来负责的,尽管JVM规范并不要求特殊的垃圾回收技术,甚至根本就不需要垃圾回收,但是由于内存的有限性,JVM在实现的时候都有一个由垃圾回收所管理的堆。垃圾回收是一种动态存储管理技术,它自动地释放不再被程序引用的对象,按照特定的垃圾收集算法来实现资源自动回收的功能
          Finally:Finally语句是为异常处理事件提供的一个清理机制,一般是用来关闭文件或释放其他系统资源。作为try-catch-finally结构的一部分,可以没有Finally语句,如果存在Finally语句,不论try块中是否发生异常,是否执行过catch语句,都执行finally语句这就是两者的作用。
         通俗讲finally只是为异常清理垃圾释放资源,而jvm则是释放运行的应用程序建立的所有对象,不能释放程序运行占用的资源。比如异常处理中因为报异常而没有停止运行的程序,这个时候JVM就不能释放这个错误程序占有的资源,而调用finally则可以选择关闭错误程序释放资源。希望可以帮助你。
回复 使用道具 举报
Java 的垃圾回收器要负责完成3 件任务:
1.分配内存
2.确保被引用的对象的内存不被错误回收
3.回收不再被引用的对象的内存空间。
关闭资源:
在实际开发中,经常需要在程序中打开一些物理资源,
如数据库连接、网络连接、磁盘文件等,
打开这些物理资源之后必须显式关闭,否则将会引起资源泄漏。
回复 使用道具 举报
你上完厕所就冲一下呗,
非要等到阿姨来清理吗
做个文明人.....
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马