Co oznacza leniwy przydział obiektów i jak jest przydatny?co to jest leniwy przydział?
Odpowiedz
Leniwy przydział oznacza po prostu nieprzydzielenie zasobu, dopóki nie będzie faktycznie potrzebny. Jest to powszechne w przypadku obiektów singleton, ale ściśle rzecz biorąc, za każdym razem, gdy zasób jest przydzielany tak późno, jak to możliwe, masz przykład leniwego przydziału.
Opóźniając przydział zasobów do momentu rzeczywistego ich wykorzystania, można zmniejszyć czas uruchamiania, a nawet całkowicie wyeliminować przydział, jeśli nigdy nie korzystasz z obiektu. W przeciwieństwie do tego, możesz wstępnie przydzielić zasób, którego będziesz potrzebować później, co może sprawić, że późniejsza realizacja będzie bardziej wydajna kosztem czasu uruchamiania, a także uniknie możliwości niepowodzenia alokacji w późniejszym czasie w realizacji programu.
Poniższy kod stanowi przykład leniwie-przydzielonego pojedyncza:
public class Widget {
private Widget singleton;
public static Widget get() {
if (singleton == null) {
singleton = new Widget();
}
return singleton;
}
private Widget() {
// ...
}
// ...
}
Należy pamiętać, że ten kod nie jest threadsafe. W większości przypadków dostęp do metody get()
powinien być zsynchronizowany w pewien sposób.
Podobna (i być może bardziej ogólna) koncepcja to lazy initialization.
- 1. Dlaczego to przydział powoduje NPE?
- 2. Co robi leniwy val?
- 3. Co to jest std :: safe_string?
- 4. Czy LINQ jest leniwy?
- 5. Co to jest Serializable? Co to znaczy?
- 6. Co to jest "usuń to"?
- 7. Co to jest Pagel?
- 8. Co to jest _GLOBAL_OFFSET_TABLE?
- 9. Co to jest "android.R.layout.simple_list_item_1"?
- 10. Co to jest DetailsView.EnableModelValidation?
- 11. Co to jest NSPathStore2?
- 12. Co to jest czasownik = "*"?
- 13. Co to jest Postgresql_psycopg2?
- 14. Co to jest ?
- 15. co to jest .netrwhist?
- 16. co to jest Microsoft.Practices.EnterpriseLibrary.Data
- 17. Co to jest CGVector?
- 18. Co to jest $ {project.licensePath}?
- 19. co to jest alloc.h?
- 20. Co to jest PurpleEventCallback?
- 21. Co to jest global ::?
- 22. Co to jest? rodzaj?
- 23. Co to jest __meteor_bootstrap__?
- 24. Co to jest NuGetPackageImportStamp?
- 25. Co to jest LazyList?
- 26. Co to jest IllegalStateException?
- 27. Co to jest "loadall.so"?
- 28. Co to jest ws: //?
- 29. Co to jest DNVM?
- 30. Co to jest kthreadd_task
są terminy "późne obiekty" i "leniwy init" są równoznaczne? Jak w tytule tego tekstu * Java Jak programować: wersja Late Objects *? Przeszukałem go, ale nie znalazłem żadnych odniesień poza tym tekstem. – hydeph
@hydeph, wygląda na to, że Deitel ma dwie wersje tej książki, jedną z "późnymi obiektami", gdzie początkowe rozdziały są w stylu proceduralnym (i wprowadzanie klas/obiektów później) i jeden z "wczesnymi obiektami", gdzie klasy/obiekty są wprowadzane natychmiast. Używają "obiektów późnych" i "obiektów wczesnych", aby odróżnić te style nauczania. Nie ma żadnego związku z leniwą inicjalizacją. –