为什么Java有GC还需要自己来关闭某些资源?
来源:互联网 发布:js实现旋转 编辑:程序博客网 时间:2024/04/30 18:06
回复一:
因为GC只管内存不管别的资源。假如有内存以外的其它资源依附在Java对象上,如native memory(DirectByteBuffer)、file(FileInputStream)之类,那当然自己关闭最合适。为了“避免”程序员忘了自己释放那些资源,Java提供了finalizer、PhantomReference之类的机制来让程序员向GC注册“自动回调释放资源”的功能。但GC回调它们的时机不确定,所以只应该作为最后手段来使用,主要手段还是自己关闭最好。
回复二:
GC运行的时间点是不确定的(因为是一条单独存在的线程),所以很多时候你不能直接控制什么时候发生GC。这个带来的问题有两点:
一个是有时候你的内存不足需要立刻回收而GC并不会立刻运行;
另外一个是因为GC运行期间会占用大量系统资源所以某些情况下你会希望把它推后,或者干脆关掉以便根据性能需求在合适的时候手动执行。
另外,GC只能回收内存。至于各种stream之类,他们下边一般还开启了各种其他的系统资源,比如文件,比如输入输出设备(键盘/屏幕等),等等。而这些设备第一是不能自动关闭(因为谁知道你程序要用它到什么时候啊),
另一个系统内数量有限(比如键盘/屏幕同一时间只有一个)。
最后,文件和数据库连接之类的东西还存在读写锁定的问题。
这些都导致用户必须手动处理这些资源的开启和关闭。
这年头自动挡汽车都那么好了还不是有那么多人喜欢手挡,一样的。
学习Java的同学注意了!!!
学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:451815600【长按复制】 我们一起学Java!
0 0
- 为什么Java有GC还需要自己来关闭某些资源?
- JVM为什么需要GC
- 你还需要什么来管理自己的数据?
- 设计自己的基于Selenium 的自动化测试框架-Java版(1) - 为什么selenium还需要测试框架?
- 设计自己的基于Selenium 的自动化测试框架-Java版(1) - 为什么selenium还需要测试框架?
- 设计自己的基于Selenium 的自动化测试框架-Java版(1) - 为什么selenium还需要测试框架?
- 设计自己的基于Selenium 的自动化测试框架-Java版(1) - 为什么selenium还需要测试框架?
- java基础—JVM内存结构,为什么需要GC?
- java中有垃圾回收GC, 为什么还要调用close
- java中有垃圾回收GC, 为什么还要调用close
- GC是什么?为什么会有GC?
- java对于垃圾回收机制[GC垃圾回收机制] 为什么有GC还会有内存溢出呢?
- 在thinkphp框架既然系统已经有了model为什么还需要创建自己的model
- 为什么需要有JavaScript
- 原理Date对象(即Date())不是本来就有,还需要自己的定义
- JVM (1) JVM为什么需要GC?
- Java的GC是什么? 为什么要有GC?
- java内部类有什么好处?为什么需要内部类?
- 为什么我们需要PRINCE2认证——上海信息化培训中心
- python字典按键或值排序
- spark-shell无法退格/删除
- 最大连续字串和与最大连续子串积
- HDU 2577 How to Type DP .
- 为什么Java有GC还需要自己来关闭某些资源?
- iOS指纹解锁
- UltraEdit使用技巧
- hdu 4111 Alice and Bob(中档博弈题)★ ★
- 使用jQuery UI插件实现切换主题功能——经验小结
- 公司(企业与市场)与商业模式
- 20169月17-25日---身体,革命的本钱
- 细说 class类中的this指针与 构造函数
- 解决oracle11g 空表不能exp导出的问题