当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


erlang memory()用法及代码示例


erlang:memory() -> [{Type, Size}]
类型:
Type = memory_type()
Size = integer() >= 0
memory_type() =
总计 |流程| processes_used |系统|原子|
atom_used |二进制 |代码|埃斯特

返回一个列表,其中包含有关 Erlang 模拟器动态分配的内存的信息。每个列表元素都是一个元组 {Type, Size} 。第一个元素Type是说明内存类型的原子。第二个元素Size 是内存大小(以字节为单位)。

内存类型:


total

当前分配的内存总量。这与 processessystem 的内存大小之和相同。


processes

当前分配给 Erlang 进程的内存总量。


processes_used

Erlang 进程当前使用的内存总量。这是作为 processes 内存表示的内存的一部分。


system

当前分配给模拟器的内存总量,与任何 Erlang 进程没有直接关系。内存呈现为processes不包含在该内存中。 instrument(3)可用于更详细地了解哪些内存属于此类型。


atom

当前分配给原子的内存总量。该内存是 system 内存中的一部分。


atom_used

当前原子使用的内存总量。该内存是 atom 内存中的一部分。


binary

当前分配给二进制文件的内存总量。该内存是 system 内存中的一部分。


code

当前分配给 Erlang 代码的内存总量。该内存是 system 内存中的一部分。


ets

当前分配给 ETS 表的内存总量。该内存是 system 内存中的一部分。


maximum

自模拟器启动以来分配的最大内存总量。该元组仅在模拟器与检测一起运行时才存在。

有关如何使用仪器运行模拟器的信息,请参阅 instrument(3)和/或erl(1).

注意

system 值不完整。一些分配的内存是该值的一部分,但不是。

当模拟器使用检测运行时,system 值更准确,但直接分配给 malloc(及其朋友)的内存仍然不是 system 值的一部分。对 malloc 的直接调用只能从特定于操作系统的运行时库完成,也可能从不使用驱动程序接口中的内存分配函数的 user-implemented Erlang 驱动程序完成。

由于 total 值是 processessystem 之和,因此 system 中的错误会传播到 total 值。

求和的不同内存量不是自动收集的,这会在结果中引入错误。

不同的值彼此之间具有以下关系。以大写字母开头的值不是结果的一部分。

total      = processes + system
processes  = processes_used + ProcessesNotUsed
system     = atom + binary + code + ets + OtherSystem
atom       = atom_used + AtomNotUsed
RealTotal  = processes + RealSystem
RealSystem = system + MissedSystem

可以在将来的版本中添加返回列表中的更多元组。

注意

total 值应该是模拟器动态分配的内存总量。不应包含共享库、模拟器本身的代码以及模拟器堆栈。也就是说,total 值不应等于映射到模拟器的所有页面的总大小。

而且,由于存储区域的碎片和预保留,包含动态分配的存储块的存储段的大小可能远大于动态分配的存储块的总大小。

改变

从 ERTS 5.6.4 开始,erlang:memory/0要求所有erts_alloc(3)分配器已启用(默认行为)。

失败:notsup如果erts_alloc(3)分配器已被禁用。

相关用法


注:本文由纯净天空筛选整理自erlang.org大神的英文原创作品 memory() -> [{Type, Size}]。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。