advertisement -- please support sponsors

theory:
memory allocation

The new operator allocates memory for objects. How is this memory deallocated?

If you have ever programmed in C++, you might wonder why JavaScript does not have a delete operator to match the new operator. The reason for this is simple: It's not necessary!

In JavaScript, memory for objects is automatically reclaimed whenever there is no longer need for the object. The JavaScript interpreter tracks references to objects and deletes them when variables no longer refer to them.

For example, consider the following JavaScript code:

d = new Array (50); d = null;
The first statement allocates memory for an Array object large enough to hold 50 elements, and then records the fact that the new object is referenced by a variable named d.

The next statement, however, changes d so that instead of referring to the Array object, it instead contains the special value null. Since there is no longer any way to access the Array object, the JavaScript interpreter destroys it by reclaiming the memory that was allocated to it.

Reclaiming memory allocated for objects which can no longer be accessed is called garbage collection. Allocated objects which are no longer accessible by variables are called orphan objects.

This next example shows how to modify the above code to prevent the destruction of the Array object:

d = new Array (50);
e = d; //
make e refer to the same object as d
d = null; //
disassociate d from the Array object
Since the Array object is referenced by e at the moment it is abandoned by d, the Array object remains intact.

In conclusion, there is no need to worry about destroying objects in JavaScript. Garbage collection is performed automatically by the interpreter whenever objects are no longer useful or documents are unloaded. If you want to explicitly destroy an object, you can do so by abandoning it -- that is, by making sure there are no variables that refer to it. (Setting the variables to null works pretty well for this.)

Charlton Rose
11 Jan. 1997