Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Уничтожение обьектом самого себя


Автор: alexdrob 21.2.2009, 02:25
есть такой код

Код

public class Main {

    public static void main(String[] args) {
        try{
            ServerSocket server = new ServerSocket(9002);
            while (true){
                new NetSocket(server.accept());
            }
        }catch(ArrayIndexOutOfBoundsException ae){
            System.err.println("Usage: Server port");
            System.exit(0);
        }catch(IOException e){
            System.out.println(e);
        }
    }
}


и такой клас

Код

class NetSocket extends Thread
        private Socket sock;
        private InputStream is;
        private OutputStream os;
        private boolean active;
        private byte[] cIP;
......

public void run(){
        while(active == true){
          ........
         }
}


после подключения клиента памят занимаемая приложением увеличиваеться, а после отключения (active = false) уменьшаеться но не на столько на сколько увеличена. как удалить обьект полностью?

Автор: powerOn 22.2.2009, 19:35
На самом деле существует множество других причин, не связанных с удалением этого объекта, по которым память не вернулась в прежнее состояние. 

Автор: Vermut 23.2.2009, 10:11
Ваша проблема описана тут.
http://www.ibm.com/developerworks/ru/library/j-jtp11225/

Похоже ссылки на каждый NetSocket вы заносите в какую то структуру (например для периодического мониторинга) и забываете удалить.

Автор: alexdrob 27.2.2009, 04:45
в том то и дело что я не куда не заношу

Код

while (true){
        new NetSocket(server.accept());
}

Автор: math64 27.2.2009, 09:03
а нити из NetSocket завершаются? Пока они не завершатся, память не освободится.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)