对于c++而言,我们new了一个对象,则需要在合适的时候去释放它,也就是delete它。
但是对于c#和java。
前者提供了CLR公共语言运行库(Common Language Runtime)后者有Java虚拟机,它们都具有垃圾回收的功能。
既然如此,为何我们常常在写读写文件的时候,操作完毕都强调需要调用close来释放呢?
在c#中,有将资源非为托管资源和非托管资源,从名字上来看,其实就是clr能够管理的资源就是托管资源,而不能管理的资源就是非托管资源。
举个例子,你写一个person类,它是托管资源,你不手动释放,最终也会被回收,只是这个回收的时机是不确定的。
而你调用文件读写,它涉及了计算机的其他资源,所以属于非托管资源,这部分资源,clr是无法触及的,所以我们必须手动去释放。
相同的,java虚拟机也是一样的意思。
c#的crl也好,java虚拟机也好,他们都有自己的管辖范围,他们只能对纯粹的属于自己管理的内存做管理,而涉及其他内核资源的东西,它们都无法回收。
因此,我们经常看到c#中提供了idispose接口来让编程人员手动释放掉非托管资源。
java中也是经常需要调用close来释放非托管资源(java中没有这种说法,但就是一样的意思)
为何java,c#提供了内存回收机制,仍然需要手动释放内存
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
相关阅读更多精彩内容
- 在探讨这个技术之前,我们先看一段代码: 1 . 这段代码就是窗体加载时利用File静态类实现创建一个txt文件 2...