Garbage collection of binaries

Joachim Durchholz joachim.durchholz@REDACTED
Sun Oct 19 01:33:44 CEST 2003


Jesper Wilhelmsson wrote:
> Joachim Durchholz wrote:
>> Jesper Wilhelmsson wrote:
>> 
>>> Binaries are referenced counted and are removed when their conter
>>> reach zero.
>> 
>> This gives me another approach: when you're done with a binary,
>> zero out all references to it. The binary will go away immediately.
> 
> Well.. The only place where the reference count is decremented is in
> the GC and when a process dies.

Hmm... If binaries are reference counted, this sounds as if the 
following scheme is in effect:
   +----------+     +----------------+     +--------+
   |  Erlang  | --> | administrative | --> | binary |
   | variable |     |      data      |     |  data  |
   +----------+     +----------------+     +--------+
where "administrative data" contains the reference count, and maybe
additional internal data ("administrative data" and "binary data" might
actually be a single block of data).
I see two ways of getting rid of the leftmost reference:
1. If the variable is mutable, assign something else to it.
2. If it is immutable, make sure it's a local variable so that it will
die as soon as it goes out of scope.

None of these solutions is very satisfactory, but I don't see any other 
ways of solving the problem from within the application.
Solving it in the GC would be better, of course, but not everybody can 
easily do that :-)

> To manually decrement the reference count and promise the system to
> never use the address again is not a verry functional way of doing
> things.

Such an approach would not work well with any garbage-collected system,
functional or not.
Of course, it's not what I suggest.

Regards,
Jo




More information about the erlang-questions mailing list