je v Javě destruktor?

Foto José Alejandro Cuffia na Unsplash

v Javě sběrač odpadků automaticky odstraní nepoužité objekty, aby uvolnil paměť. Vývojáři nemusí označovat objekty k odstranění, což je náchylné k chybám a zranitelné vůči úniku paměti. Je tedy rozumné, že Java nemá k dispozici žádné destruktory.

v případě, že objekty obsahují otevřené sokety, otevřené soubory nebo připojení k databázi, sběrač odpadků není schopen tyto prostředky získat zpět. Prostředky můžeme uvolnit v úzké metodě a pomocí syntaxe try-finally zavolat metodu později před Java 7, jako jsou I / o třídy FileInputStream a FileOutputStream. Od Java 7, můžeme implementovat rozhraní AutoCloseable a pomocí příkazu try-with-resources psát kratší a čistší kód. Je však možné, že uživatelé API zapomenou zavolat metodu close, takže vzniká metoda finalize A Třída Cleaner, která funguje jako záchranná síť. Ale mějte prosím na paměti, že nejsou rovnocenné destruktoru.

není zaručeno, že metoda finalizace A Třída Cleaner budou spuštěny okamžitě. Dokonce nemají šanci utéct před odchodem JVM. I když bychom mohli zavolat systém.runfinalizace Chcete-li navrhnout, aby JVM spustil metody finalizace všech objektů čekajících na dokončení, je to stále nedeterministické. Metoda finalizace může navíc způsobit problémy s výkonem, zablokování atd. Více informací najdeme v jednom z našich článků: průvodce metodou finalizace v Javě. Od Java 9 je přidána Třída Cleaner, která nahrazuje metodu finalizace kvůli nevýhodám, které má. V důsledku toho máme lepší kontrolu nad vláknem, které provádí čisticí akce. SPECIFIKACE java však poukazuje na chování čističů během systému.exit je specifická implementace a Java neposkytuje žádné záruky, zda budou akce čištění vyvolány nebo ne.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.