[Vm-dev] Ephemerons support in VM
Eliot Miranda
eliot.miranda at gmail.com
Tue Apr 12 11:14:04 UTC 2016
Hi both,
> On Apr 12, 2016, at 12:45 AM, Guille Polito <guillermopolito at gmail.com> wrote:
>
> Hi Eliot, list,
>
> What is the state of Ephemeron support in the VM? I see that in Pharo we already have modified the class builder to produce ephemeric classes, but there is none yet :).
>
> The thing is that we spent last week here at RMoD chasing a memory leak that made tools remain in memory indefinitely due to some bad assumptions on how to use weak objects :).
>
> In short: Announcements use finalizers/executors that hold (indirectly) strong references to weak keys. And this is aggravated because this happens in chains/cycles among several finalizers/executors.
> Eg. executor1 points to weakkey2, executor2 points to weakkey3 and so on...
>
> Besides forcing some rules of usage of announcers (and weak announcers), we believe part of this problem would be solved by ephemerons.
>
> Thanks for some pointers!
> Guille & Pavel
forgive me for replying to your later message to the Pharo list sooner, a side effect of the way I read email in my phone when I wake up in the middle of the night ?! Further, being in my phone I need to read the code to give you accurate answers, but what I'll say is at least close to the truth.
So....
First, the ephemeron support uses a queue (an "objStack") in the VM to queue mourning ephemerons. A flag in the VM, stored in the image header and accessible via vmParameterAt:put: controls whether weak collections are added to the ephemeron queue to mourn instead of signaling the finalization semaphore and requiring a full scan of all weak registries. When I add changed finalization support and set the flag chaos ensues and I end up with no sources. Help, or a few days in which I have nothing else to do (the latter is unlikely to appear until imminent societal collapse) are needed to understand why.
I'll try and dig out the code I have soon, but it'll be early tomorrow your time.
_,,,^..^,,,_ (phone)
More information about the Vm-dev
mailing list