内存池的实现与分析

简介: 内存池的实现与分析

1、为什么要有内存池

       软件工程师所说的内存都是虚拟内存;物理内存是接触不到的;

       比如文件系统中,fd描述符在内存中是每个进程都有一份这种临时状态的数据;fd文件描述符都是从0开始增长,每个进程都是一样的;

       我们在操作内存的时候,有两个是我们可以控制的;堆上的内存,栈是不能被操作的,共享内存段mmap这块内存空间;我们说的内存池是对堆上的内存进行管理;

       为什么需要对内存进行管理,为了防止内存碎片存在,以及避免频繁申请和释放内存;引入内存池tcmalloc/jemalloc;

       由于分配内存大小是不确定的,什么时候分配是不确定的,所以导致内存池针对不同场景实现的多样性;

       场景:

               多个客户端与服务器每建立一个连接,就分配一个内存池,每断开一个连接就释放一个内存池;

 2、内存池设计,如图所示

       将待分配的内存分为大块和小块;

               1)分配的大块内存占4k空间,并通过large指针以链表的形式串连起来;

               2)被小块分配的内存通过small指针以链表的形式串连起来;每个节点同样占4k内存,链表中的节点存放了该节点的4k内存中未使用的空间的起始地址和结束地址,用户需要分配比4k小的内存时,从对应节点的4k内存中按地址顺序获取未分配的内存,并修改该节点的4k内存中未使用的空间的起始地址;

       3)对应nginx的数据结构设计如图所示

3、可以使用tcmalloc和jemalloc这些开源组件,直接嵌入到项目中实现内存池;

       

目录
相关文章
|
3月前
|
监控 Java
如何使用VisualVM分析内存泄漏?具体流程看这里
如何使用VisualVM分析内存泄漏?具体流程看这里
|
4月前
|
安全 Linux 编译器
内存泄漏检测组件的分析与实现(linux c)-mtrace工具使用
内存泄漏产生原因 在堆上使用malloc/remalloc/calloc分配了内存空间,但是没有使用free释放对应的空间。
76 0
|
4月前
3.1.2 内存池的实现与场景分析
3.1.2 内存池的实现与场景分析
|
23天前
|
缓存 Java
Java中循环创建String对象的内存管理分析
Java中循环创建String对象的内存管理分析
22 2
|
1天前
|
机器学习/深度学习 分布式计算 数据处理
Spark是一个基于内存的通用数据处理引擎,可以进行大规模数据处理和分析
【5月更文挑战第2天】Spark是一个基于内存的通用数据处理引擎,可以进行大规模数据处理和分析
9 3
|
2天前
|
监控 算法 测试技术
【Go语言专栏】Go语言的性能优化与内存分析
【4月更文挑战第30天】本文探讨了Go语言的性能优化策略和内存分析方法。性能优化原则包括基准测试、分析瓶颈、避免过早优化和持续监控。优化策略涉及减少内存分配、避免内存逃逸、利用并发、优化算法和数据结构以及减少系统调用。内存分析借助于Go的`pprof`工具、内存分配跟踪和第三方工具,以发现内存泄漏和管理问题。通过这些方法,开发者能提升Go程序效率和资源利用率。
|
5天前
|
缓存 Java Android开发
安卓开发中的内存泄漏分析与优化策略
【4月更文挑战第27天】 在移动应用开发领域,性能优化始终是提升用户体验的关键因素之一。特别是对于安卓平台,由于设备的硬件配置差异较大,良好的内存管理对于保证应用流畅运行尤为重要。本文将深入探讨安卓开发中常见的内存泄漏问题,并提供一系列检测和解决内存泄漏的实用策略。通过对工具的使用、代码实践以及系统架构设计的多维度分析,旨在帮助开发者有效避免和处理内存泄漏,确保应用性能稳定。
|
9天前
|
Java
【Java基础】面向对象和内存分析
【Java基础】面向对象和内存分析
12 0
|
9天前
|
存储 Java Shell
Android系统 实现低内存白名单防LMK原理分析
Android系统 实现低内存白名单防LMK原理分析
19 0
|
24天前
|
存储 程序员 编译器
c++面向对象概述、内存分析、引用、函数
c++面向对象概述、内存分析、引用、函数