LRU cache for ~=
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Mon Oct 19 18:11:52 PDT 2009
dsimcha wrote:
> == Quote from Andrei Alexandrescu (SeeWebsiteForEmail at erdani.org)'s article
>> dsimcha wrote:
>>> == Quote from Andrei Alexandrescu (SeeWebsiteForEmail at erdani.org)'s article
>>>> dsimcha wrote:
>>>>> Started playing w/ the implementation a little and I see a problem. What about
>>>>> the garbage collector? There are two possibilities:
>>>> [snip]
>>>>> The only possible solutions I see would be to have the GC know everything about
>>>>> the LRU cache and evict stale entries (probably slows down GC a lot, a huge PITA
>>>>> to implement, couples things that shouldn't be tightly coupled), or clear the
>>>>> cache every time GC is run (probably would make appending so slow as to
> defeat the
>>>>> purpose of having the cache).
>>>> I think GC.collect may simply evict the entire cache. The collection
>>>> cycle costs so much, the marginal cost of losing cached information is
>>>> lost in the noise.
>>>> Andrei
>>> But then you have to copy the whole array again, likely triggering another GC if
>>> the array is large. Then things really get ugly as, for all practical purposes,
>>> you've completely done away with the cache.
>> This happens whether or not a cache is in use.
>> Andrei
>
> But the array isn't guaranteed to get reallocated immediately after *every* GC
> run. If you're appending to a huge array, the GC will likely run several times
> while you're appending, leading to several unnecessary reallocations.
I don't think I understand this.
1. Request for an append comes that runs out of memory
2. GC runs and clears memory
3. Array is reallocated and the capacity cached.
No?
> Each of
> those unnecessary reallocations will increase the memory footprint of your
> program, possibly triggering another GC run and wiping out your cache again in
> short order, until, for sufficiently large arrays,
>
> a ~= b;
>
> is almost equivalent to
>
> a = a ~ b;
I don't understand how the cache makes that all worse.
Andrei
More information about the Digitalmars-d
mailing list