.NET 的内存管理机制(五)

简介: 有了对象创建的基本流程概念,值类型中的引用类型字段和引用类型中的值类型字段,其分配情况又是如何?

值类型中的引用类型字段和引用类型中的值类型字段,其分配情况又是如何?

对于值类型嵌套引用类型的情况,引用类型变量作为值类型的成员变量,在堆栈上保存该成员的引用,而实际的引用类型仍然保存在 GC 堆上;对于引用类型嵌套值类型的情况,则该值类型字段将作为引用类型实例的一部分保存在 GC 堆上。

方法保存在 Loader Heap 的 MethodTable 中,那么方法调用时又是怎么样的过程?

MethodTable 中包含了类型的元数据信息,类在加载时会在 Loader Heap上创建这些信息,一个类型在内存中对应一份 MethodTable,其中包含了所有的方法、静态字段和实现的接口信息等。对象实例的 TypeHandle 在实例创建时,将指向 MethodTable 开始位置的偏移处(默认偏移 12Byte),通过对象实例调用某个方法时,CLR 根据 TypeHandle 可以找到对应的 MethodTable,进而可以定位到具体的方法,再通过 JIT Compiler 将 IL 指令编译为本地 CPU 指令,该指令将保存在一个动态内存中,然后在该内存地址上执行该方法,同时该 CPU 指令被保存起来用于下一次的执行。

在 MethodTable 中,包含一个 Method Slot Table,称为方法槽表,该表是一个基于方法实现的线性链表,并按照以下顺序排列:继承的虚方法,引入的虚方法,实例方法和静态方法。方法表在创建时,将按照继承层次向上搜索父类,直到 System.Object 类型,如果子类覆写了父类方法,则将会以子类方法覆盖父类虚方法。

静态字段的内存分配和释放,又有何不同?

静态字段也保存在方法表中,位于方法表的槽数组后,其生命周期为从创建到 AppDomain卸载。因此一个类型无论创建多少个对象,其静态字段在内存中也只有一份。静态字段只能由静态构造函数进行初始化,静态构造函数确保在类型任何对象创建前,或者在任何静态字段或方法被引用前执行。

结论

对象创建过程的了解,是从底层接触 CLR 运行机制的入口,也是认识.NET 自动内存管理的关键。通过本文的详细论述,关于对象的创建、内存分配、初始化过程和方法调用等技术都会建立一个相对全面的理解,同时也清楚的把握了线程栈和托管堆的执行机制。

相关文章
|
4天前
|
存储 开发框架 .NET
"揭秘.NET内存奥秘:从CIL深处窥探值类型与引用类型的生死较量,一场关于速度与空间的激情大戏!"
【8月更文挑战第16天】在.NET框架中,通过CIL(公共中间语言)可以深入了解值类型与引用类型的内存分配机制。值类型如`int`和`double`直接在方法调用堆栈上分配,访问迅速,生命周期随栈帧销毁而结束。引用类型如`string`在托管堆上分配,堆栈上仅存储引用,CLR负责垃圾回收,确保高效且自动化的内存管理。
17 6
|
4天前
|
存储 缓存 编译器
Linux源码阅读笔记06-RCU机制和内存优化屏障
Linux源码阅读笔记06-RCU机制和内存优化屏障
|
4天前
|
缓存 程序员
封装一个给 .NET Framework 用的内存缓存帮助类
封装一个给 .NET Framework 用的内存缓存帮助类
|
4天前
|
缓存 开发框架 .NET
看看 Asp.net core Webapi 项目如何优雅地使用内存缓存
看看 Asp.net core Webapi 项目如何优雅地使用内存缓存
|
7天前
|
NoSQL Redis
Redis——设置最大内存 | key淘汰机制
Redis——设置最大内存 | key淘汰机制
19 0
|
1月前
|
存储 缓存 监控
Flink内存管理机制及其参数调优
Flink内存管理机制及其参数调优
|
1月前
|
存储 算法 调度
深入理解操作系统的内存管理机制
【7月更文挑战第12天】本文将深入探讨操作系统中至关重要的内存管理机制。内存是计算机系统中宝贵的资源,其管理效率直接影响系统性能。我们将从内存管理的基本原理出发,逐步解析分页和分段技术、虚拟内存的概念以及内存分配策略等核心内容。通过实例分析,揭示现代操作系统如何优化内存使用,提高系统响应速度及资源利用效率。
|
1月前
|
存储 缓存 算法
操作系统中的内存管理机制探究
【7月更文挑战第13天】本文深入探讨了操作系统中至关重要的内存管理机制,揭示了其对系统性能与稳定性的影响。通过分析现代操作系统中内存管理的基本原理、关键技术以及面临的挑战,文章提供了对内存分配策略、虚拟内存技术和缓存管理等核心概念的深度解析。进一步地,文章讨论了内存泄漏和碎片化问题,提出了相应的解决策略,旨在为读者提供操作系统内存管理的全面视角,并指出未来可能的发展趋势。
|
1月前
|
缓存 监控 关系型数据库
深入理解Linux操作系统的内存管理机制
【7月更文挑战第11天】在数字时代的浪潮中,Linux操作系统凭借其强大的功能和灵活性,成为了服务器、云计算以及嵌入式系统等领域的首选平台。内存管理作为操作系统的核心组成部分,对于系统的性能和稳定性有着至关重要的影响。本文将深入探讨Linux内存管理的基本原理、关键技术以及性能优化策略,旨在为读者提供一个全面而深入的理解视角,帮助开发者和系统管理员更好地优化和管理Linux系统。
|
1月前
|
机器学习/深度学习 计算机视觉 网络架构
【YOLOv8改进 - 注意力机制】HCF-Net 之 PPA:并行化注意力设计 | 小目标
YOLO目标检测专栏介绍了HCF-Net,一种用于红外小目标检测的深度学习模型,它通过PPA、DASI和MDCR模块提升性能。PPA利用多分支特征提取和注意力机制,DASI实现自适应特征融合,MDCR通过多层深度可分离卷积细化空间特征。HCF-Net在SIRST数据集上表现出色,超越其他方法。论文和代码分别在[arxiv.org](https://arxiv.org/pdf/2403.10778)和[github.com/zhengshuchen/HCFNet](https://github.com/zhengshuchen/HCFNet)上。YOLOv8的PPA类展示了整合注意力机制的结构