Garbage collection – PB Docs 70

Garbage collection

The PowerBuilder 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 execution-time 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.

When garbage collection occurs

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, PowerBuilder removes a reference to the object,
    counts the remaining references, and destroys the object if no references
    note.gif Posting events and functions When you post an event or function and pass an object reference, PowerBuilder adds
    an internal reference to the object to prevent it from being garbage
    collected 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 PowerBuilder 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).

Exceptions to garbage collection

There are a few objects that are prevented from being garbage

  • Visual objects Any object that is visible on your screen is not garbage 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.
  • Timing objects Any Timing object that is currently running is not garbage
    collected because the Start function for a Timing object adds an internal
    reference. The Stop function removes the reference.
  • Shared objects Registered shared objects are not garbage collected because
    the SharedObjectRegister function adds an internal reference. SharedObjectUnregister
    removes the internal reference.

Controlling when garbage collection occurs

Garbage collection occurs automatically in PowerBuilder,
but you can use functions to force immediate garbage collection
or to change the interval between reference count checks. Three
functions have been added to let you control when garbage collection
occurs: GarbageCollect, GarbageCollectGetTimeLimit, and GarbageCollectSetTimeLimit.

For information about these functions, see
the PowerScript Reference
. For an example illustrating
their use, see the Code Examples sample application, described in Chapter 1, “Using
Sample Applications”

Performance concerns

You can use tracing and profiling to examine the effect of
changing the garbage collection interval on performance.

For information about tracing and profiling,
see the PowerBuilder User’s Guide

Document get from Powerbuilder help
Thank you for watching.
Was this article helpful?
Notify of
Inline Feedbacks
View all comments
Would love your thoughts, please comment.x