java threads. Heap size уменьшается при создании потока, почему?
Есть сервер-приложение которое ожидает подключения, и когда оно появляется создает новый поток для работы с новым подключением. В целом это выглядит так:
public abstract class Server {
protected ServerSocket server;
protected Server(int port) throws IOException {
server = new ServerSocket(port);
}
public void start() {
new Thread(() -> {
System.out.println("Server started [" + server.getInetAddress().getHostAddress() + ":" + server.getLocalPort() + "]");
while (true) {
try {
// принимаем подключение
Socket connection = server.accept();
// создаем и запускаем новый поток для мониторинга
new Thread(new Monitor(connection)).start();
} catch (IOException e) {
System.out.println("Accept Failed!");
}
}
}).start();
}
private class Monitor implements Runnable {
private Socket socket;
Monitor(Socket socket) {
this.socket = socket;
}
@Override
public void run() {
try {
// слушаем
while (status) listen(socket);
} catch (IOException e) {
System.out.println("IO exception");
}
}
}
protected abstract void listen(Socket socket) throws IOException;
}
Вся проблема в том, что при новой подключении при создании потока Heap size резко сокращается:

А при отключении соединения поток останавливается и Heap size резко вырастает до 1000MB:

Есть идеи почему так происходит и что сделать, чтобы при создании потока Heap size не уменьшалось?
Спасибо