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 : 중요한 차이를 만들어서는 안됩니다. 컴파일러는 스택에 필요한 지역을 한 번만 할당 할만큼 똑똑합니다. –