美文网首页
为何java,c#提供了内存回收机制,仍然需要手动释放内存

为何java,c#提供了内存回收机制,仍然需要手动释放内存

作者: 最怕认真 | 来源:发表于2018-02-28 16:14 被阅读257次

对于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#提供了内存回收机制,仍然需要手动释放内存

    对于c++而言,我们new了一个对象,则需要在合适的时候去释放它,也就是delete它。但是对于c#和java。前...

  • 第几天了。昨天没学。

    JAVA语言的内存回收机制,内存回收线程负责释放无用内存。 在JAVA中,File类提供本地文件系统,对文件及其属...

  • V8 Garbage Collection

    这篇文章主要介绍两种V8中使用到的垃圾回收的算法。 为什么需要垃圾回收机制呢?为何我们不自己手动释放内存,分配内存...

  • iOS内存管理笔记

    objective-C不像C#、Java那样使用垃圾回收机制回收内存(GC),而是使用引用计数器机制管距内存。 引...

  • JS垃圾回收机制(内存问题)

    垃圾收集机制理解 垃圾收集机制:释放无用的数据,回收内存。 垃圾收集机制分类:1)自动回收 2)手动回收 垃圾收集...

  • iOS开发基础之内存管理

    为什么要进行内存管理 Objective-C不像JAVA和C#等语言,内存管理依赖垃圾回收(GC)机制;它需要开发...

  • GC回收机制与分代回收策略

        垃圾回收(Garbage Collection, 简写为GC) , Java开发者不需要手动释放对象的内存...

  • 垃圾回收你懂,Java垃圾回收你懂吗?

    摘要:在用 C 之类的编程语言时,程序员需要自己手动分配和释放内存。而 Java 不一样,它有垃圾回收器,释放内存...

  • 06 垃圾回收

    Java 虚拟机是自动内存管理,将原本需要由开发人员手动回收的内存,交给垃圾回收器来自动回收。不过既然是自动机制,...

  • 对 Java 内存的一些理解-[Android_YangKe]

    Java 垃圾回收机制优点 Java 内存模型 什么是内存抖动 什么是内存泄漏 垃圾回收机制常见算法 Java 垃...

网友评论

      本文标题:为何java,c#提供了内存回收机制,仍然需要手动释放内存

      本文链接:https://www.haomeiwen.com/subject/lsfixftx.html