[erlang-questions] Measuring GC pressure and memory efficiency

Joel Reymont <>
Fri Dec 14 12:37:50 CET 2007


I would like to measure the memory efficiency of the following module.  
I suppose this would tell me how much pressure it puts on the GC,  
except it may not because it uses binaries.

How do I measure the amount of temporary binaries each function  
generates as well as the total amount of garbage?

	Thanks, Joel

P.S. This is code written by Julian Fondren for this thread:

http://erlang.org/pipermail/erlang-questions/2006-December/024591.html

---

-module(arrays).

-export([new/1, new/2, new/3, get/2, put/3, size/1, elt_width/1]).

new(Size) ->
     new(Size,0,32).

new(Size,Init) ->
     new(Size,Init,32).

new(Size,Init,Width) when Size > 0, Width > 8, Width rem 8 == 0 ->
     new(Size,Init,Width,<<>>).

new(0,_,W,B) ->
     <<W:32, B/binary>>;

new(N,I,W,B) ->
     new(N-1,I,W,<<I:W, B/binary>>).

get(N,<<W:32,B/binary>>) when N > 0 ->
     Before = W * (N - 1),
     <<_:Before, X:W,
      _/binary>> = B, X.

put(N,X,<<W:32,B/binary>>) when N > 0 ->
     Before = W * (N - 1),
     <<Bef:Before, _:W, After/binary>> = B,
     <<W:32, Bef:Before, X:W, After/binary>>.

size(<<W:32, B/binary>>) ->
     erlang:size(B) div (W div 8).

elt_width(<<W:32, _/binary>>) ->
     W.

--
http://wagerlabs.com








More information about the erlang-questions mailing list