Попробуйте сделать
private static class Read extends Thread {
private static Socket socket;
private static String address;
и
private static class Write extends Thread {
private static Socket socket;
к нестатическому.
Кроме того, я не знаю, как вы проверяете память, но помните, что Java собирает мусор, и вы увидите увеличение использования памяти на начальном этапе до тех пор, пока сборщик мусора (GC) не соберет ее и будет увеличиваться до следующего запуска GC. Так что он постоянно увеличивается без каких-либо провалов в течение долгого времени, только тогда происходит утечка памяти, иначе вам не помешает.
Я запустил приведенный выше код в том виде, в каком он есть, и работал в течение 1-2 часов, при этом на машине Mac используется около 54 МБ памяти с использованием JDK 6. Я не использую JConsole
, который поставляется с jdk, чтобы увидеть использование mem. Я не нашел никаких проблем.
Ниже приведен график, как я уже упоминал в моих ответах, у вас есть пик и падение ... в конце, когда я остановил клиента, он плоский.