-
Notifications
You must be signed in to change notification settings - Fork 0
memory_allocation
wzs edited this page Aug 27, 2018
·
1 revision
程序语言自主管理内存分配的优势
- 可以完成类似 预分配, 内存池等 操作, 避开系统调用带来的性能问题.
- 更好的配合垃圾回收
内存分配的基础策略
- 每次从操作系统申请一大块内存(比如 1MB), 以减少系统调用.
- 将申请到的大块内存按照特定大小预先切分成小块, 构成链表.
- 为对象分配内存时, 只需从大小合适的链表提取一个小块即可.
- 回收对象内存时, 将该小块内存重新归还到原链表, 以便复用.
- 如闲置内存过多, 则尝试归还部分内存给操作系统, 降低整体开销.
- 注意:
- 只有系统调用才能真正的开辟内存, 只有系统调用才能真正的回收内存
- 内存分配器只管理内存块, 并不关心对象状态
- 内存分配器不会主动回收内存, 由垃圾回收器在完成清理操作后, 触发内存分配器回收操作
go的内存分配器 将管理的内存块分为两种:
- span: 由多个 地址连续 的页组成, 大块内存, 面向内部管理.
- 地址连续的页: 操作系统-内存管理
- object: 将span切分成多个特定大小的小块, 每个小块可以存储一个对象. 面向对象分配