gpt4 book ai didi

c# - C# 和 Java 中的垃圾回收之间的根本区别是什么?

转载 作者:IT老高 更新时间:2023-10-28 21:06:41 26 4
gpt4 key购买 nike

我最近从“高级”开发人员/同事那里得到了一些关于 C# 垃圾收集器的非常错误的建议,例如......

  • "你需要使用析构函数在 C# 中无处不在,因为垃圾收集器不可依赖。”

  • "C# 垃圾收集器不能被认为是 Java 垃圾 Collection 家”。

这对我来说听起来非常可疑,据我所知,C# 和 Java 垃圾收集器之间的区别如下......

  • C# 是世代垃圾收集器,Java 是并发标记扫一扫 1.6,G1 是新的默认(世代)垃圾收集器采用 Java 7 并具有自~1.6.21 以来一直是可选的。目前据我所知
  • C# 作为一门语言有能力手动处理对象实现IDisposable。 Java 必须总是使用垃圾收集,虽然有些框架像 SWT要求您手动调用方法在底层释放内存 native 代码。

我意识到 Java 和 C# 只是语言,而垃圾收集器是运行时的一个组件,但是对于这种情况,我要特别谈谈 Sun/Oracle JVM 和 Microsoft .NET 运行时。

有人有意见吗?

最佳答案

从广义上讲,你得到的建议是胡说八道。

C# 和 Java 都有尝试优化大量小对象的快速恢复的 GC。它们旨在解决相同的问题,它们的处理方式略有不同,但作为用户,您在使用它们的方法上的技术差异很小,甚至对大多数用户来说都不存在。

IDisposable 本身与 GC 无关。这是一种命名方法的标准方式,否则这些方法将被称为 closedestroydispose 等,并且通常在 Java 中被称为。有人提议 Java 7 添加与 using 关键字非常相似的内容,该关键字将调用类似的 close 方法。

C# 中的“析构函数”指的是终结器——这是故意让 C++ 程序员感到困惑的。 :) CLR 规范本身将它们称为终结器,就像 JVM 一样。

Java 和 C#/CLR 有许多不同之处(用户值类型、属性、泛型以及称为 Linq 的整个相关功能系列),但 GC 是您可以开发大量软件的一个领域在您不必担心它们之间的区别之前。

关于c# - C# 和 Java 中的垃圾回收之间的根本区别是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3478530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com