我最近从“高级”开发人员/同事那里得到了一些关于C#垃圾收集器的非常错误的建议,例如…
“在C#中,您需要在所有地方使用析构函数,因为不能依赖垃圾收集器。”
“不能将C#垃圾收集器视为Java垃圾收集器”。
就我所知,这听起来非常可疑,据我所知,C#和Java垃圾收集器之间的区别如下…
IDisposable
我意识到Java和C#只是语言,而垃圾收集器是运行时的组成部分,但是,在这种情况下,我专门讲的是Sun / Oracle JVM和Microsoft .NET Runtime。
有人反馈吗?
从广义上讲,您得到的建议很多。
C#和Java都有GC,它们试图优化许多小对象的快速恢复。它们旨在解决相同的问题,它们以略有不同的方式进行处理,但是作为用户,您使用它们的方法上的技术差异很小,甚至对于大多数用户而言都是不存在的。
IDisposable与GC本身无关。它的命名方法的标准方式,否则将被调用close,destroy,dispose等,并经常被称为是在Java中。对于Java 7,有人建议添加与using关键字非常相似的内容,以调用相似的close方法。
close
destroy
dispose
using
C#中的“析构函数”指的是终结器-故意这样做是为了混淆C ++程序员。:) CLR规范本身将它们称为终结器,就像JVM一样。
Java和C#/ CLR有很多不同的方式(用户值类型,属性,泛型和整个相关功能家族,称为Linq),但是GC是您可以在需要之前开发大量软件的领域之一担心它们之间的差异。