At Sat, 8 Aug 2020 03:32:57 -0400, George Neuner wrote: > > On 8/8/2020 1:55 AM, Sorawee Porncharoenwase wrote: > > I even saw people doing `collect-garbage` three times, just to be safe > > I guess. And yet theoretically it's not guaranteed that things will be > > claimed back properly. > > > > Honestly, there should be a function that does this `collect-garbage` > > until fixpoint or something, so that we don't need to perform this ... > > uh .... ritual. > > There may be no documented guarantee, but I *think* the implementation > assures that 2 collections, back-to-back, are sufficient to reclaim all > objects that were garbage at the beginning of the 1st collection. At > least for BC Racket.
In the absence of finalization, then a single `collect-garbage` would always be sufficient, and a second `collect-garage` would have no effect. For the specific benchmark in this thread as run in plain `racket`, I think a single `collect-garbage` is sufficient, and that's what I normally do. But finalization complicates the picture --- especially finalization via `register-finalizer`, since the finalizers run in a background thread. Because of that background thread, in a context that uses a library like `racket/gui`, I sometimes use repetitions of (collect-garbage) (sync (system-idle-evt)) It's difficult to know whether the libraries that you use rely on finalization. Also, finalization means that there is no simple number of `(collect-garbage)`s and `(sync (system-idle-evt))`s that are needed to really collect everything that could potentially be collected; finalization chains can require an arbitrary number of `(collect-garbage)` cycles to clean up (so libraries should avoid finalization chains!). The collector is precise and the compiler is safe-for-space, so you can reason about the reachability of an individual value, but reasoning precisely about overall memory use across many libraries is difficult or impossible. Using an extra `(collect-garbage)` is not ideal and often not necessary, but it's a reasonable just-to-be-sure habit. Matthew -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/20200808074547.3a2%40sirmail.smtps.cs.utah.edu.

