I have concerns about weak refs and weak maps, one concern related to 
usability, one related to performance bugs, and another other related to 
changing the complexity of the GC algorithm.

Usability
Weak maps act as a GC API and in doing so violate GC's greatest strength:  the 
user does not have to be concerned with memory management.  Since the user can 
never observe that a key/value pair has been deleted,  weak maps are much 
better than weak refs but they still seem capable of causing hard to diagnose 
and fix performance bugs related to memory pressure and the particular GC 
implementation.

GC implementation
Software stacks on multicores will need GCs to become increasingly concurrent 
and latency free. Weak maps cause concurrent GCs and additional mutator 
synchronizations.  While a concurrent GC already has to do some 
synchronization, each additional synchronization point impedes scalability. My 
concern is that the number of synchronization points might be proportional to 
the number of <k, v> pairs in the weak maps (see below).

GC Complexity
Another potential performance bug is that the complexity of the Abstract GC 
Algorithm at http://wiki.ecmascript.org/doku.php?id=harmony:weak_maps appears 
to be O(n**2), since each loop may only discover a single retained key k from 
(k,v) whose walk of the related value v discovers only a single unretained k. 
This would then be repeated and require rescanning all the weak maps in the 
each of the following iterations. Concurrent GCs would probable require one or 
more mutator synchronizations at each iteration.

My sense is that the value of a simple efficient concurrent GC and reduced 
latency is higher than the value of weak maps so weak maps should not be part 
of the standard.


-          Rick



_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to