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