我使用while循环从Amazon SQS中获取消息。部分代码如下:java while循环内存泄漏
ReceiveMessageRequest receiveMessageRequest = new ReceiveMessageRequest(myQueueUrl);
while (true) {
List<Message> messages = sqs.receiveMessage(receiveMessageRequest).getMessages();
if (messages.size() > 0) {
MemcachedClient c = new MemcachedClient(new BinaryConnectionFactory(), AddrUtil.getAddresses(memAddress));
for (Message message : messages) {
// get message from aws sqs
String messageid = message.getBody();
String messageRecieptHandle = message.getReceiptHandle();
sqs.deleteMessage(new DeleteMessageRequest(myQueueUrl, messageRecieptHandle));
// get details info from memcache
String result = null;
String key = null;
key = "message-"+messageid;
result = c.get(key);
}
c.shutdown();
}
}
在这种情况下会造成内存泄漏吗? 我使用“ps aux”进行检查。我发现的是RSS(驻留集大小,任务使用的非交换物理内存)正在缓慢增长。
您正在循环中定义变量。将您的定义移动到循环上方并在循环中重新使用/重新分配。 –
它只是增加开销,他们使用相同的指针,不是吗? –
@ D.N .:这不应该有重大区别。编译器足够聪明,只需在堆栈中分配一次所需的本地数据。 –