Que signifie l'allocation paresseuse d'objets et en quoi est-elle utile?qu'est-ce que l'allocation paresseuse?
Répondre
L'attribution différée signifie simplement ne pas allouer une ressource tant qu'elle n'est pas réellement nécessaire. C'est commun avec les objets singleton, mais à proprement parler, chaque fois qu'une ressource est allouée aussi tard que possible, vous avez un exemple d'allocation paresseuse. En retardant l'allocation d'une ressource jusqu'à ce que vous en ayez réellement besoin, vous pouvez diminuer le temps de démarrage et même éliminer complètement l'allocation si vous n'utilisez jamais réellement l'objet. En revanche, vous pouvez préallouer une ressource dont vous pensez avoir besoin plus tard, ce qui peut rendre l'exécution ultérieure plus efficace au détriment du temps de démarrage, et évite également que l'allocation échoue plus tard dans l'exécution du programme.
Le code suivant donne un exemple d'un singleton paresseusement alloué:
public class Widget {
private Widget singleton;
public static Widget get() {
if (singleton == null) {
singleton = new Widget();
}
return singleton;
}
private Widget() {
// ...
}
// ...
}
Prenez note que ce code n'est pas threadsafe. Dans la plupart des cas, l'accès à la méthode get()
doit être synchronisé d'une manière ou d'une autre.
Un concept similaire (et peut-être plus général) est lazy initialization.
- 1. Évaluation paresseuse dans SSRS
- 2. String.format avec évaluation paresseuse
- 3. L'évaluation CASE normale ("paresseuse") de CASE?
- 4. Résolution paresseuse de l'injection de dépendance
- 5. Core Data to-many relations. Sont-ils la charge paresseuse?
- 6. Comment sérialiser une liste paresseuse LINQ-to-SQL
- 7. fluent nhibernate r1.0 fluent mapping désactiver la charge paresseuse
- 8. Pourquoi l'instanciation paresseuse de MessageResourcesFactory dans Struts 1.2.7?
- 9. Comment créer une collection paresseuse et mise en cache dans Silverlight/CSLA
- 10. Comment utiliser le chargement de la propriété paresseuse avec l'essentiel de GlassFish + toplink
- 11. Evénement JTable + TableModel de récupération de cache pour une instanciation paresseuse?
- 12. Comment savoir si une relation paresseuse n'est pas encore chargée, avec SQLAlchemy?
- 13. VS2008, le rapport via RDLC pose problème avec les objets de second niveau en raison d'une charge paresseuse
- 14. Est-il nécessaire de mettre en cache les données pour une propriété chargée paresseuse avec le dépôt simple Subsonic 3?
- 15. Py3K conservation de la mémoire en retournant itérateurs plutôt que des listes
- 16. Que signifie "==="?
- 17. Que signifie = *?
- 18. Que signifie %%?
- 19. Est-ce que SqlDataReader stocke tout en tant que chaîne?
- 20. Que peut faire ce que sed ne peut pas faire?
- 21. Que signifie i_tmp2 lorsqu'il est utilisé en tant que variable?
- 22. .NET en tant que client, Java en tant que serveur
- 23. Je suppose que SqlParameter.IsNullable n'a de sens que lorsque ...?
- 24. qu'est-ce que NMAKE?
- 25. Que fait cette fonction?
- 26. qu'est-ce que swingset2
- 27. Que sont les "downargs"?
- 28. lucene plus grand que
- 29. Qu'est-ce que WPF?
- 30. IIS7 - que fait MaxProcesses?
sont les termes "objets en retard" et "paresseux init"? Comme dans le titre de ce texte * Java Comment programmer: Late Objects Version *? J'ai googlé mais je n'ai trouvé aucune référence au-delà de ce texte. – hydeph
@hydeph, on dirait que Deitel a deux versions de ce livre, une avec "late objects", où les chapitres initiaux sont en style procédural (et introduisant des classes/objets plus tard) et un avec des "early objects", où classes/objets sont présentés immédiatement. Ils utilisent des «objets tardifs» et des «objets précoces» pour distinguer ces styles d'enseignement. Il n'a aucune relation avec l'initialisation paresseuse. –