Under certain conditions, an application server can throw out-of-memory errors when the heap still had ample memory available.
“Error starting thread: Not enough storage is available to process this command."
The cause of this message can be either improper sizing of the JRockit heap generations or memory fragmentation caused by system class placement in the heap, or both. Unlike the Java Hotspot and IBM® JVMs, JRockit does not have permanent system class heap space, which can cause fragmentation problems in certain scenarios.
To avoid this issue, consider setting your JRockit nursery size to 25% of the total heap. Depending upon the workload, this setting might require some additional adjustments. You can monitor the nursery size by using VerboseGC collection and analysis.