##### OpenJMS

- Overview
- Downloads
- Release Notes
- Getting Started
- User Guide
- Administrator Guide
  - Installation
  - Running OpenJMS
  - Configuration
    - Database
    - Connectors
    - JNDI
    - Connection Factories
    - Security
    - Destinations
    - Garbage Collection
    - Reference
- Developer Guide
- FAQ

##### Search OpenJMS

##### Project Documentation

- About
- Project Info
- Project Reports
- Development Process

##### Legend

- External Link
- Opens in a new window

## Garbage Collection

The OpenJMS server periodically runs a garbage collector to conserve memory. Garbage collection will also be run if available memory falls below a configured threshold.

The garbage collector collects:

- Expired messages

  These are messages whose JMSExpiration property is non-zero, and the time indicated by the property has passed.

  Expired messages are removed both from memory and/or the database if they are persistent.

- Message caches

  Messages are cached on a per-destination basis. A topic message cache will be garbage collected if it has no active consumers. A queue message cache will be garbage collected if it has no active consumers and:

  - it is administered and contains no messages; or
  - it is temporary, and there is no corresponding Connection instance (i.e, the client connection has been closed or lost)
  An active consumer is any `TopicSubscriber`, `QueueReceiver` or `QueueBrowser` currently registered with the message cache.
- Cached persistent messages

  These are messages cached in memory to avoid the overhead reading them from the database. These are removed from memory when available memory is low.

## Configuration

The garbage collector is configured via the <GarbageCollectionConfiguration> element in the $OPENJMS_HOME/config/openjms.xml configuration file:

      <GarbageCollectionConfiguration memoryCheckInterval="30"
                                      lowWaterThreshold="20"
                                      garbageCollectionInterval="600"
                                      garbageCollectionThreadPriority="5"/>

## See Also

The following references provide detailed descriptions of the configuration elements related to garbage collection:

- GarbageCollectionConfiguration