concepts/
efun/
CONCEPT
	memory
	swapping

DESCRIPTION

	(Collected from the Changelogs of the driver source)

	The swapping algorithm has been changed. A test is done for
	every object, comparing to a time stamp. If the object hasn't
	been touched for a while, it could be subject for swapping.
	Here comes the new thing: the function 'clean_up()' will be
	called in the object. If the object still remains, the old
	swapping algorithm will continue. That means that objects that
	would never be subject to swapping (cloned objects) now have a
	chance to self-destruct. It also means that rooms that
	contains no important data can self-destruct. Self-destruction
	saves more memory than swapping, as swapping only frees the
	program code, while self-destruction also frees the internal
	object representation.
	
	The call of clean_up() has been modified. There is a constant
	in config.h that defines how long time until clean_up is
	called in an object. This call is independent of reset() and
	swapping. It is recommended that the swapping time is
	something short, like 10 minutes to 30 minutes, while the time
	to clean_up is longer.
	
	Fixed several bugs in the swap/reset/clean_up logic.
	Recommended values are that the swap time is short (less than
	30 minutes), and that reset time is medium (aprox 60 minutes),
	and that time to clean_up is long (greater than 1.5h hours).
	Any feedback of how to best tune these values are welcome. The
	call of reset will be done once, and not yet again until the
	object has been touched. This enables reset'ed objects to stay
	swapped out. If you have a mudlib that has no ojbects that
	defines 'clean_up', then you may better define this time as 0,
	which means never call clean_up (and thus never swap the
	object in needlessly). A well implemented usage of clean_up is
	better than the swap algorithm, as even cloned objects can be
	cleaned up and a self destruction is more efficient than
	swapping (memory wise).
	
	Changed mechanism of calling clean_up() slightly. Only objects
	that defines the function will be called. And, only clean_up()
	that returns non-zero will be called again. This will minimize
	calls of clean_up(), while still cost very litte to maintain.
	
	clean_up() now gets a flag as argument, which will be non-zero
	if the the program of this object is used for inheritance by
	other objects.
	
SEE ALSO
	clean_up(A), slow_shut_down(M), quota_demon(M), malloc(D)