JAVA的垃圾回收与.net中的GC,析构函数之间的异同点? 10

急求详细!~~谢谢!... 急求详细!~~谢谢! 展开
 我来答
0xCBA000
2010-12-04 · TA获得超过282个赞
知道答主
回答量:123
采纳率:0%
帮助的人:149万
展开全部
垃圾回收 = GC,Gabage Collection
一般来说GC是一件不用程序员所关心的事情。
.NET Framework 的垃圾回收器管理应用程序的内存分配和释放。
每次您使用 new 运算符创建对象时,运行库都为该对象分配内存。
只要托管堆中有地址空间可用,运行库就会继续为新对象分配空间。
但是,内存不是无限大的。
最终,垃圾回收器必须执行回收以释放一些内存。
垃圾回收器根据正在进行的分配情况确定执行回收的最佳时间。
当垃圾回收器执行回收时,它检查托管堆中不再被应用程序使用的对象并执行必要的操作来回收它们占用的内存。

大多数情况下,垃圾回收器可以确定执行回收的最佳时间,应让其独立运行。
在某些不常发生的情况下,强制回收可以提高应用程序的性能。
在这些情况下,可使用 Collect 方法强制垃圾回收,以引发垃圾回收。

在 Java 中,JVM (java虚拟机)通过跟踪对已分配资源的引用来释放不再使用的内存。只要 JVM 检测到不再由有效引用引用的资源,该资源就被作为垃圾回收。

在 C# 中,垃圾回收由与 JVM 的功能类似的公共语言运行库 (CLR) 处理。CLR 垃圾回收器定期检查内存堆中是否有任何未引用的对象,并释放这些对象占用的资源。

对于您的应用程序创建的大多数对象,可以依靠 .NET Framework 的垃圾回收器隐式地执行所有必要的内存管理任务。
但是,在您创建封装非托管资源的对象时,当您在应用程序中使用完这些非托管资源之后,您必须显式地释放它们。
最常见的一类非托管资源就是包装操作系统资源的对象,例如文件、窗口或网络连接。
虽然垃圾回收器可以跟踪封装非托管资源的对象的生存期,但它不了解具体如何清理这些资源。
对于这些类型的对象,.NET Framework 提供 Object.Finalize 方法,它允许对象在垃圾回收器回收该对象使用的内存时适当清理其非托管资源。
默认情况下,Finalize 方法不执行任何操作。
如果您要让垃圾回收器在回收对象的内存之前对对象执行清理操作,您必须在类中重写 Finalize 方法。

若要在 C# 中实现 Finalize 方法,您必须使用析构函数语法。

参考资料: MSDN Libraries

勤快还清冽的毛豆9842
2010-12-04 · TA获得超过128个赞
知道答主
回答量:55
采纳率:0%
帮助的人:97.1万
展开全部
垃圾回收的缩写就是GC。

无论java还是C#的GC都是相应的虚拟机用来释放无用内存的机制,不同之处在于他们用的虚拟机不同。
C++的析构函数是程序员手动写的回收内存和善后处理的函数。其功能相当与java的GC(回收内存)和finallize(善后处理)方法加起来。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
znrtia
2010-12-07 · TA获得超过253个赞
知道答主
回答量:156
采纳率:0%
帮助的人:114万
展开全部
GC就是垃圾回收机制,垃圾回收机制本质都是相同的,无论java .net都是自动释放资源,而析构函数是自己写的,但同样是对象函数调用完毕系统自动调用,但要用delete手动释放
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式