我有一个简单的UDP服务器,它创建一个新的线程来处理传入的数据.在通过发送大约100个包/秒进行测试时,我注意到它的内存使用量继续增加.我的代码下面是否有明显的泄漏?
这是服务器的代码.
public class UDPServer { public static void main(String[] args) { UDPServer server = new UDPServer(15001); server.start(); } private int port; public UDPServer(int port) { this.port = port; } public void start() { try { DatagramSocket ss = new DatagramSocket(this.port); while(true) { byte[] data = new byte[1412]; DatagramPacket receivePacket = new DatagramPacket(data, data.length); ss.receive(receivePacket); new DataHandler(receivePacket.getData()).start(); } } catch (IOException e) { e.printStackTrace(); } } }
这是处理数据的新线程的代码.目前,run()方法不执行任何操作.
public class DataHandler extends Thread { private byte[] data; public DataHandler(byte[] data) { this.data = data; } @Override public void run() { System.out.println("run"); } }
Mavrik.. 5
当然,你在每个循环中分配(至少)1412个字节的新内存.在GC启动并清除所有未使用的已分配数据之前,您会看到内存使用量增加.
使用Java VisualVM等内存分析器可视化和分析行为.
当然,你在每个循环中分配(至少)1412个字节的新内存.在GC启动并清除所有未使用的已分配数据之前,您会看到内存使用量增加.
使用Java VisualVM等内存分析器可视化和分析行为.