C# 和 Java 中的垃圾回收之间的根本区别是什么?
我最近从一位“高级”开发人员/同事那里得到了一些关于C#垃圾收集器的非常错误的建议,例如......
“你需要在C#的任何地方使用析构函数,因为垃圾回收器是无法依赖的。
“C#垃圾回收器不能像Java垃圾回收器那样被认为是这样的”。
这对我来说听起来非常可疑,据我所知,C#和Java垃圾回收器之间的区别如下......
- C# 是一代垃圾回收器,Java 在 1.6 中是并发标记扫描,G1 是具有 Java 7 的新的默认(分代)垃圾回收器,并且自 ~1.6.21 以来一直是可选的。据我所知
- C# 作为一种语言,能够手动释放实现 的对象。Java 必须始终使用垃圾回收,尽管某些框架(如 SWT)要求您手动调用方法来释放底层本机代码中的内存。
IDisposable
我意识到Java和C#只是语言,垃圾回收器是运行时的一个组件,但是在这种情况下,我特别谈到了Sun / Oracle JVM和Microsoft .NET Runtime。
有人有反馈吗?