当前位置:网站首页 > 编程语言 > 正文

de4dot源码分析(dehazenet源码下载)



b9b10b82d66db862b696e3e24d104265.png
标准的SOH(0代,1代,2代),LOH结构,因此String Intern作为JIT编译阶段就能确定的静态内容,如果放在SOH堆中,就不太合适。存放在LOH堆中反而是更好的选择,因为LOH中没有升代,没有压缩,内存地址也不会移动。更加适合静态数据。

d54e928ea2fa9628bfb0eb7781b4fbfe.png

  1. 三个静态数据的内存地址
    772908946629992451983fbe15b7fee0.png
  2. 它们的GC 引用根
    7cf1a02e21a4c2e303d125c58ff9ebad.png
    三个静态数据都引用了同一个gcroot
  3. GC根分配在LOH
    4adfc0675f0c4e4cb6fb9f3a781ce35b.png

大家可以思考一个问题,LOH堆的定义是指>=85000byte的大对象才会进入的堆。而静态数据只是利用了LOH的特性,但本质与LOH描述不符,属于投机取巧的行为。也会给开发者带来困扰,比如说我。
因此在.NET 5 以后,CLR开发人员新增了一个Pinned object heap ,用于存储固定对象的特殊堆。来解决定义不匹配的问题
f5bff5917fe04763298fe01ed1a2cf40.png

79eda2fcfb29c76d6c3fd8d6d0183d21.png

4aa5027adc512e529d1c76e90ebfc5d0.png

到了.NET 8 中,CLR团队又新增了NonGC heap ,顾名思义,这代表一个不会被GC的托管堆。很奇怪吧?
那有人就有疑问了? POH堆不是已经完美了吗?为什么还要新增堆?CLR团队给出了答案
bdc6800b2b70659720bbbd866cde7ca7.png
主要是为了提高性能,没有写屏障,没有GC。这大大提高了效率

https://github.com/dotnet/runtime/blob/main/docs/design/features/NonGC-Heap.md
b258814de6065dfc4de2dbf4d9ec3977.png

678ee157938253668fe58dd975174de7.png

113535bff3ba8b8a5b9ffa472472021f.png

到此这篇de4dot源码分析(dehazenet源码下载)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • 读取文件权限在哪里设置(读取文件权限怎么设置)2025-03-28 09:45:09
  • gjk算法(gjk算法求距离)2025-03-28 09:45:09
  • 查看本机本级信息(在哪里看本机信息)2025-03-28 09:45:09
  • ip反查域名工具有哪些(ip反查域名工具有哪些功能)2025-03-28 09:45:09
  • 原位癌基底膜是什么(原位癌基底膜4层分层图)2025-03-28 09:45:09
  • 流量回放工具(流量回放是什么意思)2025-03-28 09:45:09
  • 文字图标生成(文字图标生成器app)2025-03-28 09:45:09
  • 环形队列一定优于非环形队列吗(环形队列是一种什么结构)2025-03-28 09:45:09
  • libpng.dll丢失(libhl.dll丢失)2025-03-28 09:45:09
  • 颜色代码查询对照表(颜色代码对应表)2025-03-28 09:45:09
  • 全屏图片