11-07 00:01:44.941: I/dalvikvm-heap(28992): Clamp target GC heap from 17.195MB to 16.000MB
11-07 00:01:44.941: D/dalvikvm(28992): GC_FOR_MALLOC freed 0 objects / 0 bytes in 30ms
11-07 00:01:45.071: E/dalvikvm-heap(28992): Out of memory on a 39884-byte allocation.
11-07 00:01:45.071: I/dalvikvm(28992): "Thread-10" prio=5 tid=9 RUNNABLE JIT
11-07 00:01:45.071: I/dalvikvm(28992): | group="main" sCount=0 dsCount=0 s=N obj=0x442d3210 self=0x27c7f0
11-07 00:01:45.071: I/dalvikvm(28992): | sysTid=29015 nice=0 sched=0/0 cgrp=unknown handle=2606416
11-07 00:01:45.071: I/dalvikvm(28992): | schedstat=( 3252080000 1784382000 10203 )
11-07 00:01:45.071: I/dalvikvm(28992): at java.lang.String.<init>(String.java:~468)
11-07 00:01:45.071: I/dalvikvm(28992): at org.apache.harmony.luni.util.Util.convertUTF8WithBuf(Util.java:265)
11-07 00:01:45.071: I/dalvikvm(28992): at java.io.DataInputStream.decodeUTF(DataInputStream.java:445)
11-07 00:01:45.071: I/dalvikvm(28992): at java.io.DataInputStream.decodeUTF(DataInputStream.java:437)
11-07 00:01:45.071: I/dalvikvm(28992): at java.io.DataInputStream.readUTF(DataInputStream.java:432)
11-07 00:01:45.071: I/dalvikvm(28992): at java.io.ObjectInputStream.readNewString(ObjectInputStream.java:2194)
11-07 00:01:45.071: I/dalvikvm(28992): at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:931)
11-07 00:01:45.071: I/dalvikvm(28992): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2285)
11-07 00:01:45.071: I/dalvikvm(28992): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2240)
11-07 00:01:45.071: I/dalvikvm(28992): at com.unitas.kitchen.ActivityKitchenClientD$GetThread.run(ActivityKitchenClientD.java:426)
11-07 00:01:45.071: W/dalvikvm(28992): threadid=9: thread exiting with uncaught exception (group=0x4001d868)
11-07 00:01:45.081: E/AndroidRuntime(28992): FATAL EXCEPTION: Thread-10
11-07 00:01:45.081: E/AndroidRuntime(28992): java.lang.OutOfMemoryError
11-07 00:01:45.081: E/AndroidRuntime(28992): at java.lang.String.<init>(String.java:468)
11-07 00:01:45.081: E/AndroidRuntime(28992): at org.apache.harmony.luni.util.Util.convertUTF8WithBuf(Util.java:265)
11-07 00:01:45.081: E/AndroidRuntime(28992): at java.io.DataInputStream.decodeUTF(DataInputStream.java:445)
11-07 00:01:45.081: E/AndroidRuntime(28992): at java.io.DataInputStream.decodeUTF(DataInputStream.java:437)
11-07 00:01:45.081: E/AndroidRuntime(28992): at java.io.DataInputStream.readUTF(DataInputStream.java:432)
11-07 00:01:45.081: E/AndroidRuntime(28992): at java.io.ObjectInputStream.readNewString(ObjectInputStream.java:2194)
11-07 00:01:45.081: E/AndroidRuntime(28992): at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:931)
11-07 00:01:45.081: E/AndroidRuntime(28992): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2285)
11-07 00:01:45.081: E/AndroidRuntime(28992): at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2240)
11-07 00:01:45.081: E/AndroidRuntime(28992): at com.unitas.kitchen.ActivityKitchenClientD$GetThread.run(ActivityKitchenClientD.java:426)
---------------------------------------------------------------------------------------------------------------------------------'
class GetThread extends Thread {
private ObjectInputStream ois = null;
private ObjectOutputStream oos = null;
private String message = null;
private ArrayList<TempsOrderInfo> tt = null;
public GetThread(Socket socket){
try {
this.ois = new ObjectInputStream(socket.getInputStream());
this.oos = new ObjectOutputStream(socket.getOutputStream());
this.oos.writeObject("사용자가 접속되었습니다.");
} catch (IOException e) {
e.printStackTrace();
}
}
public void run() {
isStop = false;
while (!isStop) {
try {
this.message = (String) this.ois.readObject();
ParsingJson pj = new ParsingJson();
tt = pj.parsingRecOrd(this.message);
if (tt != null) {
handler.post(new Runnable() {
public void run() {
temp = tt;
displayGridItem();
System.gc();
Log.d("Client", "get data");
}
});
}
} catch (OptionalDataException e) {
e.printStackTrace();
isStop = true;
} catch (ClassNotFoundException e) {
e.printStackTrace();
isStop = true;
} catch (IOException e) {
e.printStackTrace();
isStop = true;
}
}
}
}
위와 같은 에러가 발생합니다.
pc에서 자바로 코딩하여 TCP/IP 소켓 통신을 하고 있구요.
JSON 포맷의 전문을 보냅니다. 계속보내다보니 heap memory 오버플로우 현상이 발생하더군요.
처음에는 JSON 파싱시가 문제인줄 알고, 위 bold 된 부분을 주석쳐서 단순히 this.message = (String) this.ois.readObject();
이렇게 받는 부분만 남겨두었는데, 여기서 오버플로우가 발생하더군요. 그래서 this 를 통해 heap메모리에 올리지 않게끔
해보려고 했는데 소용이 없더군요...
대체 왜 이부분에서 out of memory 에러가 발생하는지 모르겠습니다. 반복문으로인한 것인지..
반복문으로 인해 메모리 해제가 안된다면 어떻게 해결을 해야할지...
어제부터 정말 모르겠습니다.. 조금이라도 작은 답변이라도 부탁드립니다...
다른 방법으로... 해결했습니다...