Preventive Measures
The heap in an embedded system can't be expanded because of the lack
of virtual memory. This makes running out of memory a critical
situation that applications should avoid using preventive measures.
Since it's impossible for a Java application to explicitly free memory
(it can only make its best effort to ensure that references to an
object are suppressed), it can be worthwhile to encourage references
to huge but easily recomputable objects using weak references.
Weak references were introduced in JDK 1.2. They allow references to
an object to be maintained without preventing the object from being
reclaimed by the collector. Applications may also use the
MemoryAdvice interface to be implemented by the
RunTime class in JDK 1.2. It defines the
getMemoryAdvice method that returns four indicators of the
memory usage, as estimated by the runtime environment, from GREEN
(everything is fine) to RED (take every conceivable action to discard
objects).
In the case of an application running out of memory, an aggressive
garbage collection pass should be performed. The garbage collector
must be guaranteed the memory this operation requires. Since some
stack and some heap may be necessary, the system needs to monitor the
low-water mark, and prevent the application from totally running out
of memory before taking action. If no memory can still be found, the
system throws an OutOfMemoryError error and it's up to the application
to selectively choose which parts should be discarded.
|