Skip to content

tanshaoliang/erlang_term

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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): 4 words + 2 words per key/value pair + the size of each pair
  • Large Map (N > 32): At least, 2 words + 2 * N words + 2 * log16(N) words + the size of each pair
  • 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

Maps use a "flatmap" (a pair of tuples) before switching to a Hash Array Mapped Trie (HAMT) implementation after the size becomes larger than MAP_SMALL_MAP_LIMIT (32). The upper-limit of a HAMT map is used in ERTS (HASHMAP_ESTIMATED_HEAP_SIZE(SIZE) == (SIZE*3 + (2*SIZE/5)*2)) but the result severely exaggerates the size of a map. Due to the difficulty anticipating the in-memory size of a map, the size is taken directly by using erts_debug:flat_size/1. The C macros above may change in the future (the macros above are from erts/emulator/beam/erl_map.h in Erlang 18.1).

License

BSD

Contact

Michael Truog (mjtruog [at] gmail (dot) com)

Thanks

About

Erlang Term Info

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Erlang 91.0%
  • Elixir 9.0%