代码之家  ›  专栏  ›  技术社区  ›  Srikar Doddi

垃圾回收是如何在Java中完成的,它是如何与.NET相比较的?

  •  10
  • Srikar Doddi  · 技术社区  · 14 年前

    我想知道两者的区别是什么,或者两者是否相同。

    3 回复  |  直到 14 年前
        1
  •  2
  •   Stephen C    14 年前

    这个问题不能回答。

    首先,相关的规范都没有提到 怎样 Java或.NET应该实现垃圾回收。因此,在Java或.NET中,根本没有“GC的方式”。

    其次,GC如何实现的细节在Java和.NET的各个供应商之间是不同的,对于任何供应商,GC可以随每个平台、每个主要版本、次要版本甚至每个补丁版本而改变。除此之外,Java的一些实现允许您使用命令行选项在不同的垃圾收集器之间进行选择。

    最后,在Java或.NET实现中如何实现GC并不重要。 假如 可以使其按应用程序的要求工作。而对于Java,答案是它可以适用于大多数类型的应用程序。(例外情况通常是具有硬实时要求或非常严格的内存限制的系统/应用程序。)

        2
  •  1
  •   Andrew_B    14 年前

    我想没有概念上的区别。 因为记忆模型略有不同( for example volative difference )实现可能有所不同。

        3
  •  1
  •   Community CDub    7 年前

    我发现了这个 link 从我的另一个 question on SO 这对Java和.NET/C语言中垃圾收集的差异有一定的回答。对于其他正在寻找这种信息的人,这里是-

    在Java对象上创建 使用new关键字堆。大多数 C中的类是在堆上创建的 使用新的关键字。也正如 JVM管理对 对象,通过 标记并压缩垃圾收集 算法

    注:C还支持基于堆栈的 类,称为值类型,它是 下文将进一步讨论。