okeuday / erlang_term

Erlang Term Info

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Erlang Term Info (Memory Consumption)

Build Status

Purpose

To provide the in-memory size of Erlang terms, ignoring where the Erlang terms are stored.

Size information should match the Erlang Efficiency Guide memory information:

  • Small integer: 1 word
    • On 32-bit architectures: -134217729 < i < 134217728 (28 bits)
    • On 64-bit architectures: -576460752303423489 < i < 576460752303423488 (60 bits)
  • Big integer: 3..N words
  • Atom: 1 word
  • Float:
    • On 32-bit architectures: 4 words
    • On 64-bit architectures: 3 words
  • Binary: 3..6 + data
  • List: 1 word + 1 word per element + the size of each element
  • Tuple: 2 words + the size of each element
  • Small Map (N =< 32): 5 words + the size of all keys and values
  • Large Map (N > 32): N * [1.6 .. 1.8] + the size of all keys and values
  • Pid:
    • From local node: 1 word
    • From remote node: 5 words
  • Port:
    • From local node: 1 word
    • From remote node: 5 words
  • Reference:
    • On 32-bit architectures:
      • From local node: 5 words
      • From remote node: 7 words
    • On 64-bit architectures:
      • From local node: 4 words
      • From remote node: 6 words
  • Fun: 9..13 words + size of environment
  • Erlang process: 338 words when spawned (includes a heap of 233 words)

Limitations

  • Binaries are not tracked to avoid counting a reference more than once (to avoid the extra latency and memory use)

License

MIT License

Contact

Michael Truog (mjtruog at protonmail dot com)

Thanks

About

Erlang Term Info

License:MIT License


Languages

Language:Erlang 89.1%Language:Elixir 10.9%