ben*_*rre 30 c# java garbage-collection
最近我从"高级"开发人员/同事那里得到了一些关于C#垃圾收集器的非常错误的声音建议,例如......
"你需要在C#中使用析构函数,因为不能依赖垃圾收集器."
"C#垃圾收集器不能像Java垃圾收集器那样被认为是".
这对我来说听起来非常可疑,据我所知,C#和Java垃圾收集器之间的差异如下......
IDisposable.Java必须始终使用垃圾收集,尽管某些框架(如SWT)要求您手动调用方法以释放底层本机代码中的内存.我意识到Java和C#只是语言而垃圾收集器是运行时的一个组件,但是对于这种情况,我特别谈到了Sun/Oracle JVM和Microsoft .NET Runtime.
有人有反馈意见吗?
Dan*_*ker 16
从广义上讲,你给出的建议很多.
C#和Java都有GC试图优化许多小对象的快速恢复.它们旨在解决同样的问题,它们以稍微不同的方式实现,但作为用户,使用它们的方法中的技术差异很小,甚至对于大多数用户来说也是不存在的.
IDisposable与GC无关.它的命名,否则将被调用的方法的标准方式close,destroy,dispose等,并经常被称为是在Java中.有人建议Java 7添加与using调用类似close方法的关键字非常相似的东西.
C#中的"析构函数"指的是终结符 - 这是故意混淆C++程序员的.:) CLR规范本身称它们为终结器,就像JVM一样.
Java和C#/ CLR有很多种不同的方式(用户值类型,属性,泛型和称为Linq的整个相关功能系列),但GC是一个可以在需要之前开发大量软件的领域要担心他们之间的差异.