1

我希望通过改善接收数据包时垃圾收集引起的小滞后来提高性能。我有一个简单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 查看器中所示)。我知道为了避免垃圾收集,你想尽量不分配内存,但是有没有人看到用上面的代码做到这一点的好方法并且仍然达到相同的结果?

我查看了这个线程这个线程,但不确定它们将如何映射到我的特定情况。我也看到了调用 GC 的建议,但在这种情况下,GC 已经在此期间执行了很多次。

任何建议将不胜感激!

4

1 回答 1

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 对象?缓冲区的大小不会改变,所以你可以保持不变。

于 2012-04-19T22:28:24.650 回答