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 не уменьшалось?
Спасибо


Ответы (0 шт):