AnsweredAssumed Answered

Avoid OutOfMemoryError (crash) in XMPPTCPConnection

Question asked by konradk on Apr 27, 2016
Latest reply on May 22, 2016 by konradk



We are using Smack 4.1.x releases and every day we are receiving a few crash reports like the one below.


java.lang.Object[] of length 2147483647 exceeds the VM limit


I believe it's because of the processHandledCount method in XMPPTCPConnection class: 00743/smack-tcp/src/main/java/org/jivesoftware/smack/tcp/ L1792


The crash may happen because of two reasons:

* there is not enough memory to allocate

* the array length exceeds platform limit (


As you may know, the SMUtils.calculateDelta may return value bigger than Integer.MAX_VALUE in case if serverHandledStanzasCount is bigger than handledCount.


I'm not entirely sure what should be the best way to fix the issue but I believe it should be enough to get rid of initial ArrayList capacity at all or use the handledCount as initial capacity if we really want to avoid unnecessary calls to increase ArrayList capacity during the iteration in the next steps. What do you think about it?