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 에러가 발생하는지 모르겠습니다. 반복문으로인한 것인지..

반복문으로 인해 메모리 해제가 안된다면 어떻게 해결을 해야할지...

어제부터 정말 모르겠습니다.. 조금이라도 작은 답변이라도 부탁드립니다...