Android - 改进数据报套接字垃圾收集

时间:2012-04-19 22:22:31

标签: android sockets garbage-collection udp

我希望通过改善接收数据包时垃圾收集造成的小滞后来提高性能。我有一个简单的DatagramSocket接收数据如下:

DatagramSocket sock;
try {
    sock = new DatagramSocket(port);
    sock.setReuseAddress(true);
} catch (SocketException e) { }

DatagramPacket pack = null;
byte[] buff = new byte[SIZE];

while(!sock.isClosed()){
    try{
        pack = new DatagramPacket(buff, buff.length());
        sock.receive(pack);
    } catch (IOException e) { }
}

上面的代码运行良好,但最终会有很多收集垃圾的调用(如我的LogCat查看器中所示)。我知道为了避免垃圾收集你想尝试不分配内存,但有没有人看到用上面的代码做到这一点的好方法仍然可以达到相同的结果?

我查看了this threadthis thread,但我不确定它们如何映射到我的特定情况。我还看到this suggestion要调用GC,但在这种情况下,GC在过渡期间已经多次执行。

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:0)

这个怎么样?

DatagramSocket sock;
try {
    sock = new DatagramSocket(port);
    sock.setReuseAddress(true);
} catch (SocketException e) { }

DatagramPacket pack = null;
byte[] buff = new byte[SIZE];
pack = new DatagramPacket(buff, buff.length());

while(!sock.isClosed()){
    try{
        pack.setData(buff, 0, buff.length()); // Maybe you can comment this line out. If the buffer doesn't change its irrelevant
        sock.receive(pack);
    } catch (IOException e) { }
}

您是否需要继续构建新的DatagramPacket对象?缓冲区的大小不会改变,所以你可以保持不变。