每日一题:.NET 中什么是 LOH(大对象堆)?为什么频繁使用大数组或大字符串可能导致性能问题?如何优化?

每日一题:.NET 中什么是 LOH(大对象堆)?为什么频繁使用大数组或大字符串可能导致性能问题?如何优化?

参考答案:

LOH(Large Object Heap)用于存放大于等于 85KB 的对象,如大数组、大字符串。与小对象堆不同,LOH 默认不进行压缩,对象频繁创建和释放会造成严重的内存碎片,导致 GC 次数增加、Full GC 变慢,线上表现为内存持续升高、接口抖动甚至卡顿。常见诱因包括反复创建大 byte\[\]、字符串拼接生成超大字符串等。大对象堆(LOH)不是"直接保存在二代"中,而是一个独立的堆区域,但它的生命周期和回收时机与 Gen 2 完全一致------只有在 Gen 2 GC(Full GC)时才会被回收。因此,LOH 在逻辑上被视为 Gen 2 的一部分。优化方式包括:复用大对象(如数组池 ArrayPool<T>)、避免不必要的大对象分配、拆分数据结构,或在新版本 .NET 中开启 LOH 压缩。核心原则是:减少大对象的创建频率。

相关推荐
稚南城才子,乌衣巷风流2 分钟前
ST 表(Sparse Table)算法详解:原理、实现与应用
算法
hold?fish:palm8 分钟前
9 找到字符串中所有字母异位词
c++·算法·leetcode
Sw1zzle34 分钟前
算法入门(六):贪心算法 - 基础入门(Leetcode 121/455/860/376/738)
算法·leetcode·贪心算法
青山木42 分钟前
Hot 100 --- 岛屿数量
java·数据结构·算法·leetcode·深度优先·广度优先
不会就选b1 小时前
算法日常・每日刷题--<归并排序>1
数据结构·算法
程序员-珍1 小时前
报错下载android sdk失败
android·java
糖果店的幽灵1 小时前
langgraph分支之 - 动态分支(Dynamic Branch)
java·前端·javascript·人工智能·langgraph
危桥带雨1 小时前
排序算法(快排、归并、计数、基数排序)
数据结构·算法·排序算法
吃饱了得干活1 小时前
亿级订单表分库分表设计,从0到1全流程
java·数据库·面试