i'm working with JMS. I did a simple class than send 500.000 messages to a queue.
After sending, i close the resouces. the problem is that when it send a message, increases memory space. When this has sent 14,500 messages throws an exception:
Exception in thread "Timer-0" java.lang.OutOfMemoryError: Java heap space
at java.nio.ByteBuffer.wrap(Unknown Source)
at java.lang.StringCoding$StringDecoder.decode(Unknown Source)
at java.lang.StringCoding.decode(Unknown Source)
at java.lang.String.<init>(Unknown Source)
this is the class:
I wonder why you perform all of the initial 'stuff' (performing JNDI lookup of the connection factory, queue, etc.) in the loop. It is not opptimal.
The second case is that such memory consumption can be a natural situation. You send a big bunch of messages so your heap can grow bigger. The most important thing here is to check if after the messages consumption the memory usage will drop down. If not - we may have some memory leak.
- please try to enlarge heap size. Try to set -Xmx=2048m.