[erlang-questions] Erlang Memory Question

Eranga Udesh eranga.erl@REDACTED
Thu Sep 25 04:37:07 CEST 2014


Thanks all for your advice. Let me see how I can apply them to my program.
It looks like my code/logic is going to get ugly and induce a performance
penalty, in order to save memory.

Cheers,
- Eranga

On Wed, Sep 24, 2014 at 7:58 PM, Robert Raschke <rtrlists@REDACTED>
wrote:

> I always thought that is one of the reasons to have processes.
> If you've got something big you want to throw away quickly, make a process
> for it.
>
> $ erl
> Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [smp:8:8]
> [async-threads:10] [hipe] [kernel-poll:false]
>
> Eshell V5.10.4  (abort with ^G)
> 1> erlang:memory().
> [{total,14148416},
>  {processes,4091608},
>  {processes_used,4091488},
>  {system,10056808},
>  {atom,194289},
>  {atom_used,172614},
>  {binary,1514552},
>  {code,4026600},
>  {ets,262688}]
> 2> Pid = spawn(
> 2>   fun () ->
> 2>     X = binary:copy(<<1,2,3,4,5,6,7,8>>, 1024),
> 2>     Y = binary:copy(X, 1024),
> 2>     receive stop -> ok end
> 2>   end
> 2> ).
> <0.35.0>
> 3> erlang:memory().
> [{total,22643832},
>  {processes,4203448},
>  {processes_used,4203448},
>  {system,18440384},
>  {atom,194289},
>  {atom_used,175110},
>  {binary,9685320},
>  {code,4221791},
>  {ets,267056}]
> 4> Pid ! stop.
> stop
> 5> erlang:memory().
> [{total,13587776},
>  {processes,4084496},
>  {processes_used,4084384},
>  {system,9503280},
>  {atom,194289},
>  {atom_used,175110},
>  {binary,748144},
>  {code,4221791},
>  {ets,267056}]
> 6>
>
>
> Regards,
> Robby
>
>
> On 24 September 2014 02:13, Eranga Udesh <eranga.erl@REDACTED> wrote:
>
>> Well, yes I may deliberately lie.
>>
>> However my suggestion is to, instead of doing a full sweep by the garbage
>> collector (GC) to identify data going out of scope and reclaim, can the
>> program (or rather I) deliberately say I (the calling process) is finished
>> using the said data, so the GC may free that part.
>>
>> Then the GC may carry out it's own logic, which it currently does to
>> verify if the same data is referenced by any other processes, etc., and
>> decide if to GC or not.
>>
>> = Eranga
>>
>> On Tue, Sep 23, 2014 at 12:42 PM, Richard A. O'Keefe <ok@REDACTED>
>> wrote:
>>
>>>
>>> On 23/09/2014, at 2:24 PM, Eranga Udesh wrote:
>>>
>>> > Thanks for the information received so far.
>>> >
>>> > Wouldn't it be good for Erlang to have a single object garbage
>>> collection function/bif?
>>>
>>> NO.  In C it's called free() and it's a major cause of errors.
>>>
>>> > For example, when I no longer require a large object, I force to
>>> garbage collect it, without making a full sweep?
>>>
>>> Why should the garbage collector *believe* you that the "object"
>>> is free?  You could be deliberately lying.  You could (and
>>> probably are) be mistaken.  How is it to know which bits you
>>> want to keep without doing its usual thing?  In a shared heap
>>> implementation (which Erlang has had and may have again) the
>>> fact that *you've* finished with the object doesn't mean
>>> everyone *else* has.  A meaningful operation should not depend
>>> on implementation details like that.
>>> >
>>> > As mentioned in the document, a full sweep may degrade the performance.
>>>
>>> Not half as much as freeing too much would!
>>>
>>> This is micro-optimisation.  Avoid passing around large
>>> objects in the first place.
>>>
>>>
>>
>> _______________________________________________
>> erlang-questions mailing list
>> erlang-questions@REDACTED
>> http://erlang.org/mailman/listinfo/erlang-questions
>>
>>
>
> _______________________________________________
> erlang-questions mailing list
> erlang-questions@REDACTED
> http://erlang.org/mailman/listinfo/erlang-questions
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20140925/517dd007/attachment.htm>


More information about the erlang-questions mailing list