gpt4 book ai didi

java while循环内存泄漏

转载 作者:行者123 更新时间:2023-12-02 00:39:10 26 4
gpt4 key购买 nike

我使用 while 循环从 Amazon SQS 获取消息。部分代码如下:

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(驻留集大小,任务使用的非交换物理内存)增长缓慢。

最佳答案

仅仅根据进程的RSS并不能评估你的Java应用程序是否存在内存泄漏。大多数 JVM 都非常贪婪,它们宁愿从操作系统获取更多内存,也不愿在垃圾收集上花费大量工作。

也就是说,您的 while 循环似乎也没有任何明显的内存“泄漏”,但这取决于某些方法调用的作用(上面未包含)。如果您将内容存储在静态变量中,这可能会引起关注,但如果唯一的引用位于循环范围内,则可能没问题。

了解某个代码区域是否存在内存泄漏的最简单方法是在应用程序的单次运行中严格执行该代码(可能设置相对较低的最大堆大小)。如果出现 OutOfMemoryError,则可能存在内存泄漏。

关于java while循环内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6847615/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com