gpt4 book ai didi

c# - .Net 与 Java 垃圾收集器

转载 作者:IT老高 更新时间:2023-10-28 13:53:52 28 4
gpt4 key购买 nike

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

最佳答案

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

存在一些历史差异,主要是由于 .Net 的设计借鉴了 java(和其他基于 gc 的平台)的演变。在下文中,不要假设 .Net 在某些方面优于它,因为它从一开始就包含功能,它只是后来出现的结果。

一个显着的公开可见差异是 MS GC 暴露了它的代际性质(通过 GC api),这可能会在一段时间内保持不变,因为这是基于大多数程序表现出的行为的明显方法:大多数分配是非常短暂的。

最初的 JVM 没有分代垃圾收集器,尽管这个特性被迅速添加。 Sun Oracle 和其他人实现的第一代收集器往往是 Mark and Sweep。人们意识到标记-扫描-压缩方法将导致更好的内存局部性,从而证明额外的复制开销是合理的。 CLR 运行时以这种行为首次亮相。

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

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

两家公司(以及开源实现)都在积极研究 GC 策略) 以及 pre-tenuring 方法,它们试图避免将某些分配放入伊甸园生成。

关于c# - .Net 与 Java 垃圾收集器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/492703/

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