博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
为什么Java有GC还需要自己来关闭某些资源?
阅读量:4291 次
发布时间:2019-05-27

本文共 698 字,大约阅读时间需要 2 分钟。

为什么Java有GC还需要自己来关闭某些资源?

回复一:

因为GC只管内存不管别的资源。假如有内存以外的其它资源依附在Java对象上,如native memory(DirectByteBuffer)、file(FileInputStream)之类,那当然自己关闭最合适。为了“避免”程序员忘了自己释放那些资源,Java提供了finalizer、PhantomReference之类的机制来让程序员向GC注册“自动回调释放资源”的功能。但GC回调它们的时机不确定,所以只应该作为最后手段来使用,主要手段还是自己关闭最好。

回复二:

GC运行的时间点是不确定的(因为是一条单独存在的线程),所以很多时候你不能直接控制什么时候发生GC。这个带来的问题有两点:

一个是有时候你的内存不足需要立刻回收而GC并不会立刻运行;

另外一个是因为GC运行期间会占用大量系统资源所以某些情况下你会希望把它推后,或者干脆关掉以便根据性能需求在合适的时候手动执行。

另外,GC只能回收内存。至于各种stream之类,他们下边一般还开启了各种其他的系统资源,比如文件,比如输入输出设备(键盘/屏幕等),等等。而这些设备第一是不能自动关闭(因为谁知道你程序要用它到什么时候啊),

另一个系统内数量有限(比如键盘/屏幕同一时间只有一个)。

最后,文件和数据库连接之类的东西还存在读写锁定的问题。

这些都导致用户必须手动处理这些资源的开启和关闭。

这年头自动挡汽车都那么好了还不是有那么多人喜欢手挡,一样的。

学习Java的同学注意了!!!

学习过程中遇到什么问题或者想获取学习资源的话,欢迎加入Java学习交流群,群号码:451815600【长按复制】 我们一起学Java!

转载地址:http://wcggi.baihongyu.com/

你可能感兴趣的文章
JavaScript筑基篇(二)->JavaScript数据类型
查看>>
干货:Java几种线程池的分析和使用。
查看>>
避免在Java接口中使用数组的3个理由
查看>>
android 自定义带动画的统计饼图
查看>>
入职必备,Android 真实面试题(内有答案)
查看>>
JavaScript 日期处理类库---Moment.js
查看>>
仿斗鱼直播的弹幕效果实现
查看>>
Android(Java)中的Object
查看>>
Java反射机制——学习总结
查看>>
Android大图片处理
查看>>
Hadoop平台相关技术
查看>>
Android中热修复框架AndFix原理解析及案例使用
查看>>
手写代码实现EventBus
查看>>
关于JSON的相关知识
查看>>
SpringMVC基础_常用注解
查看>>
Spring框架-IOC容器和Bean的配置(1)
查看>>
查询内容在网页里面分页显示+跳页查看
查看>>
mysql substring函数截取值后赋给一个declare变量
查看>>
Java Thread 的 sleep() 和 wait() 的区别
查看>>
DbUtils入门
查看>>