The PocketBuilder garbage collection mechanism checks memory automatically for unreferenced and orphaned objects and removes any it finds, thus taking care of most memory leaks. You can use garbage collection to destroy objects instead of explicitly destroying them using the DESTROY statement. This lets you avoid runtime errors that occur when you destroy an object that was being used by another process or had been passed by reference to a posted event or function.
Garbage collection occurs:
When a reference is removed from an object A reference to an object is any variable whose value is the object. When the variable goes out of scope, or when it is assigned a different value, PocketBuilder removes a reference to the object, counts the remaining references, and destroys the object if no references remain.
Posting events and functions When you post an event or function and pass an object reference, PocketBuilder adds an internal reference to the object to prevent its memory from being reclaimed by the garbage collector between the time of the post and the actual execution of the event or function. This reference is removed when the event or function is executed.
When the garbage collection interval is exceeded When PocketBuilder completes the execution of a system-triggered event, it makes a garbage collection pass if the set interval between garbage collection passes has been exceeded. The default interval is 0.5 seconds. The garbage collection pass removes any objects and classes that cannot be referenced, including those containing circular references (otherwise unreferenced objects that reference each other).
There are a few objects that are not collected:
Visual objects Any object that is visible on your screen is not collected because when the object is created and displayed on your screen, an internal reference is added to the object. When any visual object is closed, it is explicitly destroyed.
Shared objects Registered shared objects are not collected because the SharedObjectRegister function adds an internal reference. SharedObjectUnregister removes the internal reference.
Garbage collection occurs automatically in PocketBuilder, but you can use functions to force immediate garbage collection or to change the interval between reference count checks. Three functions allow you to control when garbage collection occurs: GarbageCollect, GarbageCollectGetTimeLimit, and GarbageCollectSetTimeLimit.
For information about these functions, see the online Help.