gpt4 book ai didi

Java Outofmemory 堆空间错误 : How do I make a deque from a vector?

转载 作者:搜寻专家 更新时间:2023-11-01 02:18:15 25 4
gpt4 key购买 nike

我是 Java 新手,非常需要您的帮助。

我目前正在使用队列,接收线程将数据放入队列中,然后解析器从中读取数据。但问题是接收器可能会以令人难以置信的峰值速度接收,例如。 3000/秒,而解析器仅以 100/秒的速度解析。

EDIT:I have checked, the queue first stays at 100 or so, and after ten seconds it starts to grow at 100 per second, and crashes at 2000 or so. Could it be possible that there is a memory leak?

我的代码(在一个紧密的循环中)是

byte[] data = new byte[1024];
System.arraycopy(udpPacket.getData(), 0, data, 0, 1024);
queue.offer(data);

堆被填满得太快,我得到了一个内存不足的异常。我想问题是队列是使用链表创建的,所有指针都必须保存在堆中。

我知道一个 C 版本可以做同样的事情(使用缓冲区)但性能要好得多,但由于部署问题,我们只能使用 Java。

最佳答案

如果您收到 3000/秒但只处理 100/秒,您迟早会耗尽内存。我可以建议您使用更多线程来进行解析吗?

关于队列,看看LinkedBlockingDequeLinkedBlockingQueue .都有高性能的线程安全队列实现。

关于Java Outofmemory 堆空间错误 : How do I make a deque from a vector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2183519/

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