Jeff Huang created AMQ-4182:
-------------------------------
Summary: Memory Leak for ActiveMQBytesMessage with Compression as
true
Key: AMQ-4182
URL: https://issues.apache.org/jira/browse/AMQ-4182
Project: ActiveMQ
Issue Type: Bug
Components: JMS client
Affects Versions: 5.5.1
Environment: Linux(Redhat 5.5), Windows 7
Reporter: Jeff Huang
InflaterInputStream is supposed to close explicitly to release resource
allocated by its JNI methods. In ActiveMQBytesMessage, dataIn property is
disposed simply without closing it, which results in some weird memory leak
that can't be detected from heap size. It can't be controlled by -Xmx or
-XX:MaxDirectMemorySize.
Please run the following test program to verify the issue:
import java.util.concurrent.TimeUnit;
import javax.jms.BytesMessage;
import javax.jms.Connection;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQBytesMessage;
/**
* A simple test to verify memory leak in ActiveMQBytesMessage.
*/
public class Main
{
public static void main(String[] args) throws Exception
{
ActiveMQConnectionFactory connFactory = new
ActiveMQConnectionFactory("vm://localhost");
connFactory.setUseCompression(true);
Connection conn = connFactory.createConnection();
Session session = conn.createSession(false, Session.AUTO_ACKNOWLEDGE);
BytesMessage message = session.createBytesMessage();
message.writeBytes(new byte[1024]);
ActiveMQBytesMessage m = (ActiveMQBytesMessage)message;
if(!m.isCompressed())
{
throw new RuntimeException();
}
while (true)
{
for (int k = 0; k < 1024; ++k)
{
message.reset();
byte[] data = new byte[1024];
message.readBytes(data);
}
TimeUnit.MILLISECONDS.sleep(10);
}
}
}
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira