들어오는 데이터를 처리하기위한 새로운 스레드를 만드는 간단한 UDP 서버가 있습니다. 초당 약 100 패킷을 전송하여 테스트하는 동안 메모리 사용량이 계속 증가한다는 것을 알았습니다. 아래 코드에서 누수가 분명합니까?Java UDP 서버로 메모리가 증가합니다.
다음은 서버 코드입니다.
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");
}
}
모든 eden, survivor 및 old-gen 힙 크기에 대한 뷰가 포함되어 있으므로이 경우 JConsole이 더 좋을 것입니다. 또한 gc를 강력하게 제안 할 수 있습니다. –