Java: Svar på övning 1 från föreläsning 9

Övning: När programmet FileCounter3 kraschar, med felet Too many open files, börjar skräpsamlaren kasta bort de allokerade MyFileObject-instanserna. Men den stannar när det finns 707 instanser kvar. Varför räknar den inte ner till 0?

Svar: Skräpsamlaren är en stödfunktion till Java-programmet, och den körs i en annan tråd. När själva programmet, dvs (i det här fallet) den tråden som kör main-metoden är avslutad, finns det ingen anledning att låta skräpsamlaren köra vidare, utan hela Java-maskinen avslutas. Skräpsamlarens tråd hinner skräpsamla en del av MyFileObject-instanserna, men det är fortfarande några kvar när den dör.

Sen kan det också vara så att skräpsamlaren faktiskt hann skräpsamla alla MyFileObject-instanserna, men det var utskrifterna som inte hann bli klara innan Java-maskinen avslutades.


Thomas Padron-McCarthy (Thomas.Padron-McCarthy@tech.oru.se). Senaste ändring 5 december 2007.