#### try-compact-in-generation Function

##### Summary

Compacts the most fragmented segment(s) in a generation in 32-bit LispWorks.

hcl

##### Signature

try-compact-in-generation generation-number time-threshold &optional fraction-threshold => result

##### Arguments
 generation-number⇩ An integer between 0 and the maximum generation number. time-threshold⇩ A real number. fraction-threshold⇩ A real number between 0 and 1.
##### Values
 result⇩ A boolean.
##### Description

The function `try-compact-in-generation` finds the most fragmented segment in the generation specified by generation-number.

If generation-number is 0, then most recent generation is considered; if generation-number is 1 then the most recent two generations are considered and so on up to a maximum (usually 3). Numbers outside this range signal an error.

If time-threshold is positive, it compacts this segment, and repeats this operation until time-threshold seconds have elapsed. At this point `try-compact-in-generation` returns, with value `t` if at least one segment was compacted and value `nil` otherwise. Because the operation cannot be stopped in the middle, the actual time taken will always be larger than time-threshold.

fraction-threshold specifies the minimum fragmentation to actually compact. The default is 0.25. If fraction-threshold is 1, `try-compact-in-generation` does nothing. If fraction-threshold is 0, `try-compact-in-generation` will compact all uncompacted segments (unless it runs out of time). With the default (0.25) `try-compact-in-generation` compacts only moderately fragmented segments.

If time-threshold is negative, then `try-compact-in-generation` does not actually compact any segments. result is a boolean indicating whether `try-compact-in-generation` would actually try to compact a segment if it were to be called with a positive time-threshold and the other arguments unchanged.

This function is typically used after a call to check-fragmentation. For more information, see 11.3.11 Controlling Fragmentation.

##### Notes

`try-compact-in-generation` is implemented only in 32-bit LispWorks. It is not relevant to the Memory Management API in 64-bit implementations, where marking-gc with the what-to-copy argument offers similar functionality ( although set-blocking-gen-num is intended to solve the problem of fragmentation automatically).