當前位置: 首頁>>編程示例 >>用法及示例精選 >>正文


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}]。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。