有一個奇怪的內存不足錯誤問題。
我創建一個類來解析實時流,並且該類需要緩衝區來保存這些原始數據。
以下是代碼片段:
/* 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