Ciao ragazzi.
Ho notato una cosa abbastanza "strana": io ho una Socket della quale utilizzo gli InputStream e OutputStream per costruire rispettivamente un ObjectInputStream e un ObjectOutputStream. E fin qui tutto ok.
Io uso senza problemi questi oggetti per comunicare con l'altro capo della Socket.
Ora... io ho avuto la necessità, ad un certo punto, di chiudere questi Stream, per interrompere la comunicazione. Se uso il metodo close() dei due oggetti, tutto funziona perfettamente: all'altro capo ricevo una EOFException che gestisco tranquillamente.
Il problema l'ho riscontrato nel momento in cui, al posto di utilizzare il metodo close(), ho optato per la "distruzione" dei due oggetti ObjectInputStream e ObjectOutputStream... Da quello che mi era stato detto, ponendo un oggetto a null, viene a mancare il riferimento all'oggetto ed il Grabage Collector dovrebbe entrare subito in azione, liberando la memoria e distruggendo l'oggetto stesso. Però questo non accade: l'oggetto, anche dopo essere stato posto a null, continua la sua esistenza e dall'altra parte della socket non ricevo alcuna eccezione. Anzi!! Se dall'altra parte l'applicazione invia dei dati, non si accorge nemmeno che i due canali sono stati distrutti!
Premesso che ho ovviamente optato per l'utilizzo del metodo close() (che è anche più corretto da un punto di vista formale), secondo voi questo è un problema del Garbage Collector (quindi di Java) oppure è normale un comportamento simile?
Grazie a quanti vorranno rispondere, azzardare un'ipotesi o anche solo dire la loro.
Ciao.