[erlang-questions] gen_server state is not released for gc
Björn-Egil Dahlberg
egil@REDACTED
Fri Jan 13 19:00:20 CET 2012
On 2012-01-13 18:50, Björn-Egil Dahlberg wrote:
> On 2012-01-13 18:33, Volodymyr Kyrychenko wrote:
>> Hi. Here is simple gen_server that holds binary in its state and never
>> releases it.
>>
>> http://ideone.com/U4f9X
>>
>> 1> X = myserver:start_link("/tmp/1.cache").
>> {ok,<0.33.0>}
>> 2> myserver:info().
>> {binary,[{140408119021616,401681797,2}]}
>> 3> myserver:release().
>> ok
>> 4> myserver:info().
>> {binary,[{140408119021616,401681797,2}]}
>> 7> memory(binary).
>> 402043632
>>
>> How come there are 2 references on it and what to do to free this
>> binary?
> it is not gc:ed yet.
To be a little more specific. The references (Procbins) to your offheap
binary are still on the process heap even though nothing in the rootset
is referencing the procbins. A gc will be triggered when the current
heap is full, binary vheap is "full" or an explicit garbage_collect is
called for, which ever comes first. At that moment the procbins will be
removed and the offheap binary will be deallocated (if nothing else is
referencing it).
// Björn-Egil
> Try erlang:garbage_collect/0 info:
>
> handle_call(info, _From, State) ->
>
> erlang:garbage_collect(),
>
> {reply, process_info(self(), binary), State};
>
>
> // Björn-Egil
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
>
More information about the erlang-questions
mailing list