GNU Smalltalk provides methods to query its own internal data structures.
You may determine the real memory address of an object or the real
memory address of the OOP table that points to a given object, by
using messages to the
Memory class, described below.
Returns the index of the OOP for anObject. This index is immume from
garbage collection and is the same value used by default as an hash
value for anObject (it is returned by Object’s implementation of
Converts the given OOP index (not address) back to an object. Fails if no object is associated to the given index.
Converts the given OOP index (not address) back to an object. Returns nil if no object is associated to the given index.
Other methods in ByteArray and Memory allow to read various C types
ucharAt:, etc.). These are mostly obsoleted
CObject which, in newer versions of GNU Smalltalk, supports
manually managed heap-backed memory as well as garbage collected
Another interesting class is ObjectMemory. This provides a few methods that enable one to tune the virtual machine’s usage of memory; many methods that in the past were instance methods of Smalltalk or class methods of Memory are now class methods of ObjectMemory. In addition, and that’s what the rest of this section is about, the virtual machines signals events to its dependents exactly through this class.
The events that can be received are
This is sent every time an image is restarted, and substitutes the concept of an init block that was present in previous versions.
This is sent just before the interpreter is exiting, either because
ObjectMemory quit was sent or because the specified files were
all filed in. Exiting from within this event might cause an infinite
loop, so be careful.
This is sent just before an image file is created. Exiting from within this event will leave any preexisting image untouched.
This is sent just after an image file is created. Exiting from within this event will not make the image unusable.