On 03/19/2014 04:39 PM, Kyle Huey wrote:
Short of not implementing things in JS, what ideas do people have for
fixing these issues? We have some ideas of how to add helpers to
scope these things to the lifetime of the window (perhaps by adding an
API that returns a promise that is resolved at inner-window-destroyed
to provide a good cleanup hook that is not global) but that doesn't
help with objects intended to have shorter lifetimes. Is it possible
for us to implement some sort of useful weak reference in JS?
There is a very long history of systems much older than Firefox trying
to use the GC to tell them how to manage behaviors other than actual
object allocation, and being unsatisfied with the results. We've really
got to find some other event to pin the behavior on.
Here's what our Allen Wirfs-Brock, editor of the ECMAScript standard,
who's been doing dynamic languages since forever, posted to
moz.dev.tech.js-engine.internals (2013-11-2):
----
My experience is that Terrence is absolutely correct in this regard and
that this position is share by virtually all experienced GC
implementors. A former colleague of mine, George Bosworth, expressed it
this way in an experience report at a ISMM a number of years ago:
A modern GC is a heuristics-based resource manager. The resources it
manages generally have very low individual value (a few dozen bytes of
memory) and exist in vast numbers. There is a wide distribution of
life-times of these resources, but the majority are highly ephemeral.
The average latency of resource recovery is important but the recovery
latency of any individual resource is generally unimportant. The
heuristics of a great GC take all of these characteristics into account.
When you piggy-back upon a GC (via finalization, or equivalent
mechanism) the management of a different kind of resource you are
applying the heuristic of memory resource management to the management
of the piggy-backed resources. This is typically a poor fit. For
example, the piggy-backed resource may be of high individual value and
exist in limited numbers (George's used file descriptors as an example).
A good GC will be a bad resource manager for such resources.
There are many types of resources that need to be managed in complex
systems. Thinking that a GC will serve as a good management foundation
for most of those resources is just naive.
I previously made some other comments that relate to this issue at
http://wiki.ecmascript.org/doku.php?id=strawman:weak_refs#allen_wirfs-brock_20111219
In particular, see the "backstop" discussion.
_______________________________________________
dev-platform mailing list
dev-platform@lists.mozilla.org
https://lists.mozilla.org/listinfo/dev-platform