大对象堆压缩,什么时候好?

2024-04-08

首先,多大才算大?有没有办法确定堆中对象有多大?

.Net 4.5.1 附带了这个LargeObjectHeapCompactionMode:

LargeObjectHeapCompactionMode 属性设置为后 GCLargeObjectHeapCompactionMode.CompactOnce,下一次完全阻塞 垃圾收集(和 LOH 的压缩)发生在 不确定的未来时间。您可以立即压缩 LOH 使用如下代码:

GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
GC.Collect();      

据我所知,压缩 LOH 是一件坏事!那么,哪一个最糟糕呢? LOH 紧凑还是 LOH 碎片化?


>= 85 KB 的分配进入 LOH。压缩 LOH 并不是坏事 - 只是 LOH 碎片不是绝大多数应用程序需要担心的问题,因此对于它们来说,不值得花费压缩的费用。

当您分配多个大对象并且它们全部从地址空间的同一页获取,然后让其中一些对象被收集时,就会发生碎片。该页面中剩余的可用空间可能无法使用,因为它太小,或者甚至只是“忘记”,因为分配器不会重新考虑再次使用它。

最终,可供使用的干净页面越来越少,因此分配器将开始减慢,因为它强制移动对象,甚至开始抛出 OutOfMemory 异常。压缩将这些对象移动到新页面,回收可用空间。

您的应用程序有这种对象使用模式吗?大多数人没有。在 64 位平台上,您甚至可能不会注意到它,因为在它成为一个大问题之前,还有相当多的地址空间需要碎片化。

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

大对象堆压缩,什么时候好? 的相关文章

随机推荐

  • MySQL 中的乐观锁

    我在 MySQL 中找不到任何有关乐观锁定的详细信息 我读到 启动事务可以使两个实体的更新保持同步 但是 它不会阻止两个用户同时更新数据 从而导致冲突 显然乐观锁定可以解决这个问题 这在 MySQL 中是如何应用的 有相关的 SQL 语法
  • JTree 节点的可更改工具提示

    我有一个 JTree 其中填充了一些 自定义 节点 我有一个类 它是 DefaultTreeCellRenderer 的子类 使用 MyTreeCellRenderer 我可以为树中的每个节点设置工具提示 它工作正常 JTree 已填充 单
  • System.Data.IDbCommand 和异步执行?

    系统 Data SqlClient SqlCommand 有方法 BeginExecuteNonQuery BeginExecuteReader BeginExecuteXmlReader and EndExecuteNonQuery En
  • 如何配置本地 Jetty ssl 以避免弱 phermeral DH 密钥错误?

    我正在使用 keytool 生成密钥库来配置本地开发码头来运行 ssl keytool exe keystore jetty keystore alias jetty genkey keyalg RSA sigalg SHA256withR
  • 堆积条形图的悬停不起作用

    我正在检查 Flot 中的堆积图表 并在条形图中发现了一些奇怪的东西 我尝试使用这个 http jsfiddle net zNXBd 41 http jsfiddle net zNXBd 41 在此示例代码中 尝试将鼠标悬停在堆叠线上 悬停
  • AnyObject 尝试转换为 Equatable

    我有一个Equatable class class Item Equatable var value AnyObject var title String init title String value AnyObject self tit
  • 何时使用 IOC 容器?

    我试图了解何时应该使用容器而不是手动注入依赖项 如果我有一个使用 1 2 个接口的应用程序 并且每个接口只有 1 2 个具体实现 我会倾向于自己处理 如果我有一个使用 2 3 个接口的小型应用程序 并且每个接口有 2 3 个具体实现 我应该
  • 删除 woocommerce 完整或基于订单元处理电子邮件

    我正在尝试根据某些订单元删除处理 或完整 电子邮件 我正在使用 POS 系统并让客户通过客户发票电子邮件付款 初始订单状态为待付款 我想 a 测试是否使用 pos 下订单 b 删除 正在处理 或 完成 电子邮件 我似乎无法让 if 语句逻辑
  • 由于找不到资源“solrconfig.xml”而无法创建新的 Solr 核心

    我刚刚安装了 Solr 并想创建一个新的核心 但出现此错误 org apache solr common SolrException Error CREATEing SolrCore new core Unable to create co
  • “查找”或任何其他工具可以广度优先搜索文件吗?

    有时我知道某个文件并不那么深 但是非常密集的子目录不允许我轻松找到我想要的文件 Can find http www gnu org software findutils manual html mono find html 或任何其他工具
  • 编译器如何知道 C++ constexpr 计算不会触发未定义的行为?

    C 标准mandates编译器要检查未定义的行为 in C constexpr 计算 In 这次演讲 https www youtube com watch v yG1OZ69H o Chandler Carruth 指出 在检查 UB 时
  • 如何在 ruby​​ 中保留我的浮点数

    所以我正在尝试一些代码将数字转换为字符串 但是 我注意到在某些情况下它不会保留最后两位小数 例如 我输入 1 01 和 1 04 进行加法 然后得到 2 04 如果我只输入 1 05 它会保留该数字并准确返回 我明白发生了什么事情正在四舍五
  • SAML 签名证书 - 哪种 SSL 证书类型?

    我们目前正在使用 SAML 2 0 开发 SSL 解决方案 到目前为止 一直使用自签名证书来签署 XML 请求 但是 当我们转向生产时 我们希望使用来自证书颁发机构的证书 但我不太确定要购买什么类型的证书 因为它们都是以网站为中心的 例如单
  • QT:如何每秒循环一个方法? C++

    我创建了一个 Qt 项目 它在小部件上显示一个圆圈 然后我有一个方法 每次调用该方法时都会在不同位置重新绘制圆 我想要的是在 for 循环中运行该方法 比如说十次 并显示每秒重绘圆圈的 10 个位置 大致如下 void method pai
  • 在 Android 中添加地理围栏时出错(状态代码 1000)

    我收到错误onAddGeofencesResult int statusCode String geofenceRequestIds 回调与statusCode 1000 我启用了 GPS 和 WiFi 我还有 Google Play 服务
  • MasterPage .FindControl 在类中

    我尝试在从内容页面访问母版页时找到一个控件 确切地说是一个图像按钮 以下是母版页html代码
  • 使用 ggplot2 根据填充值重新排序堆叠条形图 x

    进行了包含 5 个问题的调查 这些问题有相同的可能答案 以下是数据 经过重新调整以使用 ggplot2 进行绘图 library tidyr library magrittr data lt data frame ID c 1 500 q1
  • R 和 Leaflet:如何跨多行排列标签文本

    假设您有以下数据框 cities data frame name c Madrid Barcelona Sevilla country c Spain Spain Spain region c Comunidad de Madrid Cat
  • 如何跨内部 App Engine 模块验证请求?

    我在 Google App Engine 中有一个应用程序 包含 2 个模块 A and B A处理用户请求并且无需身份验证即可使用 B是一个微服务 在以下情况下执行某些任务A需要它 所以我们有A向B using urlfetch from
  • 大对象堆压缩,什么时候好?

    首先 多大才算大 有没有办法确定堆中对象有多大 Net 4 5 1 附带了这个LargeObjectHeapCompactionMode LargeObjectHeapCompactionMode 属性设置为后 GCLargeObjectH