Services & Resources / Wolfram Forums / MathGroup Archive
-----

MathGroup Archive 2014

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Memory leaks problem

  • To: mathgroup at smc.vnet.net
  • Subject: [mg132326] Re: Memory leaks problem
  • From: Richard Fateman <fateman at cs.berkeley.edu>
  • Date: Sun, 9 Feb 2014 04:49:27 -0500 (EST)
  • Delivered-to: l-mathgroup@mail-archive0.wolfram.com
  • Delivered-to: l-mathgroup@wolfram.com
  • Delivered-to: mathgroup-outx@smc.vnet.net
  • Delivered-to: mathgroup-newsendx@smc.vnet.net
  • References: <20140205082549.5383569ED@smc.vnet.net> <ld4rdc$767$1@smc.vnet.net>

On 2/8/2014 12:55 AM, Peter Klamser wrote:
> ... I think, Mathematica has lazy evaluation built in. Therefore it
> is useless to measure memory in use, because the system looks for
> free memory in ram an decides on this its strategy of storing
> results.
>
> Kind geragds from Peter

Can you point to any documentation from which you derived this 
understanding?

Mathematica does not do "lazy evaluation" though I suppose you can
delay evaluation via Hold[] and friends.
Nor does it "look for free memory"  (which I think is your way of saying
garbage collection). It uses what other people call reference counts,
a technique usually considered inferior to garbage collection. The 
documentation on "Memory Management"  does not tell you that the
technique is called reference counting.  Implemented poorly, this
technique (or for that matter, other memory management methods) is a 
source of many bugs which tend to be difficult to isolate. Perhaps
like this one.  Or maybe this is not a bug but a feature, since
Mathematica apparently "caches" some results from Integrate.

Mathematica appears to be rather inefficient in terms of memory...
MemoryInUse[]
MemoryInUse[]
%-%%
shows that some 55,000 bytes are used to store one trivial command.
To cache an integration result, from the data shown,
  it looks like 200k bytes is used each time.  That can add up.
RJF



>
>
> 2014-02-07 14:07 GMT+01:00 <bar at robox.ii.up.krakow.pl>:
>
>> Unfortunately, this is not an option,
>>
>> In my problem i have to use function
>>
>> IF[z_]:=NIntegrate[F[p],{p,0,z}];
>>
>> and parameter "z" depends on pointer of loop (wsk)
>>
>> I tried to use ClearSystemCache[] and no effects too,
>>
>> In my real calculation it is a big problem: mem:17243496
>> mem:24692800 mem:47696432
>>
>> Temporary solution is to calculate only one loop, then Exit[] and
>> run again and so on, But is not comfortable solution
>>
>> regards, Olaf
>>
>>
>>
>>
>> Sseziwa Mukasa <mukasa at gmail.com> wrote:
>>>
>>> Looks like Integrate stores information on each call, compare to
>>> these results:
>>>
>>> ClearAll["`*"]; $HistoryLength = 0; n = 5; integral =
>>> Integrate[Sin[p], {p, 0, 3}]; Do[bound = Table[{wsk, integral},
>>> {wsk, 1, 100}]; ClearAll[bound]; Print[MemoryInUse[]], {st, 1,
>>> n}];
>>>
>>> 46966216
>>
>>
>
>




  • Prev by Date: Re: Goodstein expansion
  • Next by Date: Re: Goodstein expansion
  • Previous by thread: Re: Memory leaks problem
  • Next by thread: Re: ContourPlot3d labels