I'm drawing from the very fruitful discussion with Guille and Igor, in
which we addressed *almost*unsolvable* problems with cross-heap pointerage
+GC+ in peninsulae-partitioned systems (thanks again for your patience and
contributions!).
I think that good use cases come from the knowledge-processing community
(main algorithm and examples in [1], [2]) and naturally high demand for
n-core parallel work (multiple of their queries).
In such a system the main .image contains intrinsic (base) knowledge which
the independent peninsulae/heaps/threads can access but typically *not*
manipulate; they have "temporary" character tasks+goals.
So all .images (mainland+peninsulae) can GC independent of each other,
with the following sole exception:
- before mainland can do full GC, it has to suspend all parallel threads
This is quite acceptable, the mainland .image does GUI and controls the
parallel work--nothing much else.
So, mainland can do incremental GC whenever it pleases. Relative to the
SqueakVM, the following *small* changes are needed in ObjectMemory:
- comparision for < youngSpace must also do >= startOfMemory
- peninsula GC must ignore cross-heap pointers
Other/more cross-heap interaction is not needed for the mentioned use
case; Igor's channels are sufficient for controlling+communication in a
(massive) parallel knowledge-processing system.
Cheers,
Klaus
P.S. recall that citeseer' site usually does not like being accessed over
weekends ...
[1] http://www.google.com/search?q=ConceptNet+Spreading+Activation
[2] http://www.google.com/search?q=Knowledge+Directed+Spreading+Activation
Yeah, i have to return to it, to implement this primitive and try
creating a child heap and playing with it. There is nothing
complicated, and problem not in actual implementation, but how to
detect unwanted stuff, referenced by different objects as we traverse
graph from most important objects which required in our computation,
to less important.
I'm not very happy with the fact, that to create a separate object
memory we need to transfer not only data but behavior as well (since
in smalltalk everything is data). Some kind of sharing would be very
useful here. For instance VW having fixed memory - this could be a
place where most methods could live and its safe to use them in
concurrent manner.
Another approach is distributed model made by Craig in Spoon using a
marking algorithm, which marks all methods during code execution. In
this way he can determine a possible set of behavior to transfer to
another domain to make application working. Of course it can't detect
all the possible branches, especially for applications which expect
user interaction, but at least most frequently used.
The rest of objects behavior could be 'imprinted' on demand - as soon
as there any attempt to use it.