Iv'e編碼了一個帶有.obj文件的ObjectLoader,它給了我我想要的東西。 我的問題是,當處理大文件(甚至不是那麼大,大約80kb),我最終 最終沒有得到所有的信息,因爲它會在一段時間後停止閱讀。垃圾回收問題
我在logcat中獲取該即時通訊做之前和debuger簡單地移動到下一個方法:
DEBUG/dalvikvm(25743):GC_FOR_MALLOC釋放2076名對象/在50ms的
DEBUG/dalvikvm 124280字節( 25743):GC_FOR_MALLOC釋放4名對象/在52ms
DEBUG 232字節/ dalvikvm(25743):GC_FOR_MALLOC釋放142個的對象/在49ms
DEBUG 46728字節/ dalvikvm(25743):GC_FOR_MALLOC釋放0對象/ 0字節在53ms DEBUG/dalvikvm(25743):GC_FOR_MALLOC在39ms中釋放了533個對象/ 63504個字節
DEBUG/dalvikvm(25743):GC_FOR_MALLOC釋放4名對象/在50ms的
DEBUG 216字節/ dalvikvm(25743):GC_EXTERNAL_ALLOC釋放132個的對象/ 26768字節在40ms內
換句話說,很多垃圾收集的我猜。僅僅是因爲我在代碼中分配了很多內存?如果是這樣,是否有我需要閱讀的基本知識,或者您有任何其他建議?我使用了4個矢量,每個矢量最終保存着2K-3K左右的物體。 編輯:有7個向量,3個額外的承載索引,但我仍然認爲它不是那麼多。
private void readObj(InputStreamReader in) throws IOException
{
BufferedReader reader = null;
String line = null;
reader = new BufferedReader(in);
while ((line = reader.readLine()) != null)
{
Log.v(TAG, line);
if (line.startsWith("f"))
{
faces++;
processFLine(line);
} else if (line.startsWith("vn"))
{
normals++;
processVNLine(line);
} else if (line.startsWith("vt"))
{
UVCoords++;
processVTLine(line);
} else if (line.startsWith("v"))
{
vertices++;
processVLine(line);
}
}
}
private void processVNLine(String line)
{
String[] tokens = line.split("[ ]+");
int c = tokens.length;
for (int i = 1; i < c; i++)
{
_vn.add(Float.valueOf(tokens[i]));
}
}
private void processFLine(String line)
{
String[] tokens = line.split("[ ]+");
int c = tokens.length;
if (tokens[1].matches("[0-9]+"))
{
caseFEqOne(tokens, c);
}
if (tokens[1].matches("[0-9]+/[0-9]+"))
{
caseFEqTwo(tokens, c);
}
if (tokens[1].matches("[0-9]+//[0-9]+"))
{
caseFEqOneAndThree(tokens, c);
}
if (tokens[1].matches("[0-9]+/[0-9]+/[0-9]+"))
{
caseFEqThree(tokens, c);
}
}
private void caseFEqThree(String[] tokens, int c)
{
for (int i = 1; i < c; i++)
{
Short s = Short.valueOf(tokens[i].split("/")[0]);
s--;
_vPointer.add(s);
s = Short.valueOf(tokens[i].split("/")[1]);
s--;
_vtPointer.add(s);
s = Short.valueOf(tokens[i].split("/")[2]);
s--;
_vnPointer.add(s);
}
}
這聽起來不像大量的內存除了那些矢量之外還有其他問題 – 2011-05-05 06:43:46
我不認爲任何人都可以在不查看代碼或至少數據結構的情況下提供有用的答案。 – 2011-05-05 06:48:15
好吧,我會從課堂上發佈一些代碼。也許我真的很愚蠢。從來沒有真正關心內存分配。 – Henrik 2011-05-05 06:48:28