有一个奇怪的内存不足错误问题。
我创建一个类来解析实时流,并且该类需要缓冲区来保存这些原始数据。
以下是代码片段:
/* 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()。
但似乎应用程序仍然分配太多的内存,不释放所有的内存。
感谢您的任何建议。
问候,
卡克斯顿
对@斯蒂芬的观点,'System.gc()'只是gc运行的一个建议,而不是一个授权。 – 2010-10-05 05:41:20
我有一种感觉,在这里我们没有看到其他东西... – 2010-10-05 05:42:03
看起来像别人正在保持m_byStreamBuf – bhups 2010-10-05 06:42:38