当前位置: 首页 > 面试题库 >

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

锺离辰沛
2023-03-14
问题内容

我最近从“高级”开发人员/同事那里得到了一些关于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本身无关。它的命名方法的标准方式,否则将被调用closedestroydispose等,并经常被称为是在Java中。对于Java
7,有人建议添加与using关键字非常相似的内容,以调用相似的close方法。

C#中的“析构函数”指的是终结器-故意这样做是为了混淆C ++程序员。:) CLR规范本身将它们称为终结器,就像JVM一样。

Java和C#/
CLR有很多不同的方式(用户值类型,属性,泛型和整个相关功能家族,称为Linq),但是GC是您可以在需要之前开发大量软件的领域之一担心它们之间的差异。



 类似资料:
  • 本文向大家介绍Windows和Linux之间的根本区别是什么?,包括了Windows和Linux之间的根本区别是什么?的使用技巧和注意事项,需要的朋友参考一下 视窗 窗口操作系统是磁盘操作系统的扩展。 Windows是最流行,最简单的操作系统,任何可以阅读和理解基本英语的人都可以使用Windows,因为它不需要任何特殊培训。 它要求DOS最初运行各种应用程序。因此,应该将DOS安装到内存中,然后才

  • 新生代回收器:Serial、ParNew、Parallel Scavenge 老年代回收器:Serial Old、Parallel Old、CMS 新生代回收器一般采用的是复制算法,复制算法效率较高,但是浪费内存; 老生代回收器一般采用标记清楚算法,比如最常用的CMS;

  • 问题内容: 什么是JavaScript垃圾回收?为了编写更好的代码,对于Web程序员来说,了解JavaScript垃圾回收有什么重要意义? 问题答案: 从该页面引用: JScript使用了非世代的标记清除垃圾收集器。它是这样的: 每个“范围内”的变量都称为“清除剂”。清道夫可以指数字,对象,字符串等。我们维护一个清道夫列表- 变量进入作用域时将移入scav列表,超出范围时将其移出scav列表。 垃

  • 主要内容:1 什么是Java 垃圾回收,2 Java 垃圾回收的优势,3 如何取消对象引用,4 finalize()方法,5 gc()方法,6 Java 垃圾回收的例子1 什么是Java 垃圾回收 在Java中,垃圾意味着未引用的对象。 垃圾回收是自动回收运行时未使用的内存的过程。换句话说,这是销毁未使用对象的一种方法。 我们在C语言中使用free() 函数,在C ++中使用delete()。但是,在Java中它是自动执行的。因此,java提供了更好的内存管理。 2 Java 垃圾回收的优势 它

  • 问题内容: 我想知道Java中发生的垃圾回收。它真的能够处理所有未使用的对象并释放最大可能的内存吗? 我还想知道Java垃圾收集与另一种语言(例如C#)相比如何?然后,如何自动垃圾收集与从像C这样的语言中进行手动收集相比又能达到更好的效果呢? 问题答案: 是的,这就是垃圾收集的重点。 有许多不同形式的垃圾收集。如果不增强算法,最简单的形式即引用计数就无法处理某些类型的垃圾(循环引用)。 Java(

  • 问题内容: 我是Java新手,对Java中的垃圾收集器感到困惑。它实际上是做什么的,什么时候生效。请描述Java中垃圾收集器的一些属性。 问题答案: 该垃圾收集器是运行在一个程序的Java虚拟机,其摆脱其未使用的Java应用程序了对象。它是自动内存管理的一种形式。 当典型的Java应用程序运行时,它正在创建新的对象,例如和,但是在一段时间之后,这些对象将不再使用。例如,看下面的代码: 在上面的代码