gpt4 book ai didi

java - 多次执行应用程序后内存不足

转载 作者:行者123 更新时间:2023-12-01 05:53:20 25 4
gpt4 key购买 nike

嗨,

存在奇怪的内存不足错误问题。

我创建了一个类来解析直播流,该类需要缓冲区来保存这些原始数据。

以下是代码 fragment :

/* Initial and uninitial buffer in class */
private final int MAX_BUFFER = 16;
protected byte[][] m_byStreamBuf = null; // Frame buffer
public void InitBuffer() {
m_byStreamBuf = new byte[MAX_BUFFER][];
m_byStreamBuf[0] = new byte[512*1024]; // for I Frame
for (int i = 1; i < MAX_BUFFER; i++) {
m_byStreamBuf[i] = new byte[256*1024]; // for P frame
}
}

public void UninitBuffer {
this.m_byStreamBuf = null;
System.gc();
}

多次启动和关闭应用程序后(实际上可能三四次)会出现内存不足错误。

我检查错误是否发生在分配内存的行上。

我每次关闭应用程序时都尝试调用 System.gc() 。

但是应用程序似乎仍然分配了太多内存并且没有全部释放。

感谢您的任何建议。

问候,

卡克斯顿

最佳答案

I have try to call System.gc() when close application every time.

这绝对没有帮助。如果空间不足,Java 将自动运行垃圾收集器。如果 GC 未能释放足够的内存,您只会收到 OOME。 (实际上,这过于简单化了......但这超出了您的问题范围。)

如果您的内存不足,那是因为某些东西阻止您的应用程序实例在完成后消失。也许应用程序完成后应该做一些你的应用程序没有做的事情。

一个巧妙的修复方法是在应用程序完成时将 null 分配给 m_byStreamBuf。但这仍然会导致较少的内存泄漏。

关于java - 多次执行应用程序后内存不足,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3860946/

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