.Net 与 Java 垃圾收集器

2024-04-25

有谁知道 Java 和 .Net 垃圾收集器之间的主要区别?网上搜索并没有透露太多信息,这是一个测试中出现的问题。


区别在于 CLR (.Net) GC 和 JVM GC 之间,而不是语言本身。 两者都可能发生变化,并且其行为规范宽松,允许在不影响程序正确性的情况下进行更改。

存在一些历史差异,主要是由于 .Net 的设计吸取了 java(和其他基于 gc 的平台)发展的经验教训。在下文中,不要假设 .Net 在某种程度上更优越,因为它从一开始就包含了功能,这只是后来的结果。

一个显着的公开可见的差异是,MS GC 公开了其分代性质(通过 GC api),这可能会在一段时间内保持正确,因为这是基于大多数程序所表现出的行为而采取的明显方法:大多数分配都极其困难。寿命短暂。

最初的 JVM 没有分代垃圾收集器,但很快就添加了此功能。 SunOracle 和其他公司实现的第一代收集器往往是 Mark 和 Sweep。人们意识到,标记-清除-紧凑方法将带来更好的内存局部性,从而证明额外的复制开销是合理的。 CLR 运行时以这种行为首次亮相。

SunOracle 和 Microsoft 的 GC 实现“精神”之间的区别之一是可配置性。

Sun 提供了大量选项(在命令行)来调整 GC 的各个方面或在不同模式之间切换。许多选项都是 -X 或 -XX 来指示它们缺乏跨版本或供应商的支持。相比之下,CLR 几乎不提供可配置性;您唯一真正的选择是使用服务器或客户端收集器,它们分别针对吞吐量和延迟进行优化。

两家公司(以及开源实现)都在积极研究 GC 策略,最近 GC 实现中使用的当前方法也是每个线程 eden 区域(改进局部性并允许 eden 收集可能不会导致完全暂停)作为预保有权方法,它试图避免将某些分配放入伊甸园一代。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.Net 与 Java 垃圾收集器 的相关文章

随机推荐

  • 如何将稀疏矩阵拆分为训练集和测试集?

    我想了解如何使用稀疏矩阵 我有这段代码可以生成多标签分类数据集作为稀疏矩阵 from sklearn datasets import make multilabel classification X y make multilabel cl
  • 如何以编程方式获取查找器中的“获取信息”窗格(Objective-c)?

    我们右键单击一个文件夹或文件 然后我们可以选择 获取信息 选项来显示一些信息 我想知道我们是否可以通过 Objective c 来做到这一点 None
  • 运行 Docker 映像时传递可选参数

    我有一个基于 windowsservercore 的 Docker 文件 我正在托管一个 ASP net Core Web 应用程序 docker 文件中的片段 ENTRYPOINT my exe ENV ASPNETCORE URLS h
  • 使用 htmlspecialchars 和 htmlentities 转换特殊字符

    我现在对向数据库中注入特殊字符感到困惑 例如 我想接受这样的字符 等 我想在 html 上显示它们 例如L ic这是一个法国名字 我想我必须将这些特殊字符转换为 html 实体 然后再将它们注入数据库 例如 ouml for 如果我使用ht
  • 使用 UNION 进行分组

    我的代码未正确分组 它仍然没有将 Reden uitstroom2 和 Reden uitstroom3 与 Reden uitstroom1 分组 计数工作正常 但在 Reden Uitstroom1 中显示重复项 例如 雷登 伊斯特鲁姆
  • 如何清除父Widget中的所有Widget?

    我正在使用构造函数QWidget QWidget parent 这个父窗口部件包含很多子窗口部件 我需要在运行时清除父级的所有子级小部件 我怎样才能做到这一点 之前的答案是错误的 你不能使用findChildren删除一个部件的子部件 因为
  • Querydsl 在查询中设置获取模式

    我遇到的情况是 卡实体具有人员的外键 public class Card implements java io Serializable private String cardid private Person person ManyToO
  • new ArrayList() 在 Java 中失败

    我有以下代码 List
  • Python 中的 Ruby pack('H*') 等效项

    我很难弄清楚为什么输出不一样 请注意 如果比较两者 差异非常小OUT的 我想要实现的是 Python 中的输出与 Ruby 中的输出相同 Ruby IN 034151a3ec46b5670a682b0a63394f863587d1bc974
  • 在非对象上调用成员函数 fetch_assoc()

    这是我的功能 function get fname un registerquery this gt conn gt query SELECT f name FROM tz members WHERE usr un while row re
  • Camel JAX-RS 和跨域请求

    我希望能够在我的本地 Camel 实例上执行 HTTP 请求 仅出于开发目的 我知道这是不好的做法 现在 我坚持 Origin http localhost 8000 is not allowed by Access Control All
  • 使用 NodeJs 的简单代理服务器

    目前我已经使用 Apache 设置了一个简单的代理 ProxyPass ext https ext a nice url at ProxyPassReverse ext https ext a nice url at 它工作正常 但为了让其
  • 如何使用 Postgres 轻松从文本字段中获取缩写

    我正在使用 Postgres 版本 9 4 并且我有一个full name表中的字段 在某些情况下 我想在表中输入姓名的首字母而不是全名 就像是 Name Initials Joe Blow J B Phil Smith P S The f
  • C++ 类模板的显式实例化是否实例化依赖基类?

    我认为显式实例化请求也会自动实例化所有基类成员 但我得到了linker error unresolved external symbol public void Base
  • Web 事件提供程序“EventLogProvider”引发以下异常 [已关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我无法让新的 ASP NET 4 0
  • 在 Tensorboard 中获取简单的绘图

    我正在尝试在张量板上画一个简单的图 就像他们在主页上一样 如下所示 To understand how this is working I ve wrote the following import tensorflow as tf imp
  • 具有异构数据类型的 3 个字段的多列索引

    我有一个包含 3 个字段的 postgres 表 a postgis几何 b 数组 varchar c 整数 我有一个涉及所有这些的查询 我想添加一个多列索引来加快速度 但我不能 因为这 3 个字段由于其性质而不能位于同一索引下 这种情况下
  • 创建当前日期的查询匹配[重复]

    这个问题在这里已经有答案了 可能的重复 在 JPA 查询中使用 CURRENT DATE 的示例 https stackoverflow com questions 1637323 example of using current date
  • ASP.Net Identity 2.0:用户是System.Web.Security.RolePrincipal,为什么?

    我正在尝试在现有应用程序中实现 Asp Net Identity 2 0 OWIN 但在角色方面我遇到了各种麻烦 我从项目模板创建了一个示例项目 并且 据我所知 我已将其中的所有内容复制到我的应用程序中 我修改了连接信息 以便身份验证表来自
  • .Net 与 Java 垃圾收集器

    有谁知道 Java 和 Net 垃圾收集器之间的主要区别 网上搜索并没有透露太多信息 这是一个测试中出现的问题 区别在于 CLR Net GC 和 JVM GC 之间 而不是语言本身 两者都可能发生变化 并且其行为规范宽松 允许在不影响程序