¿Qué significa la asignación diferida de objetos y cómo es útil?¿Qué es la asignación perezosa?
Respuesta
La asignación diferida simplemente significa no asignar un recurso hasta que realmente se necesite. Esto es común con objetos singleton, pero estrictamente hablando, cada vez que se asigna un recurso lo más tarde posible, tiene un ejemplo de asignación diferida.
Al retrasar la asignación de un recurso hasta que realmente lo necesite, puede disminuir el tiempo de inicio, e incluso eliminar la asignación por completo si en realidad nunca utiliza el objeto. Por el contrario, puede preasignar un recurso que espera necesitar más adelante, lo que puede hacer que la ejecución posterior sea más eficiente a expensas del tiempo de inicio, y también evita la posibilidad de que la asignación falle más adelante en la ejecución del programa.
El siguiente código muestra un ejemplo de un producto único asignado perezosamente-:
public class Widget {
private Widget singleton;
public static Widget get() {
if (singleton == null) {
singleton = new Widget();
}
return singleton;
}
private Widget() {
// ...
}
// ...
}
Ten en cuenta que este código no es multi-hilo. En la mayoría de los casos, el acceso al método get()
se debe sincronizar de alguna manera.
Un concepto similar (y tal vez más general) es lazy initialization.
- 1. Regex: ¿es perezosa?
- 2. ¿Cuándo la evaluación perezosa no es útil?
- 3. ¿En qué situaciones la asignación estática es mejor que la asignación dinámica?
- 4. ¿Qué es más rápido? Comparación o asignación?
- 5. ¿Qué es más costoso, comparación o asignación?
- 6. iterador perezosa de Python
- 7. gwt perezosa cargando
- 8. String.format con evaluación perezosa
- 9. La evaluación perezosa de argumentos suministrados
- 10. INotifyProperyChanged: ¿por qué la asignación extra?
- 11. PHP mapeo de matriz perezosa
- 12. ¿Por qué C++ admite la asignación hexadecimal, pero carece de asignación binaria? ¿Cuál es la mejor manera de almacenar banderas?
- 13. JPA: ¿Cuál es el comportamiento de la fusión con la colección inicializada perezosa?
- 14. ¿Es posible sobrecargar la asignación de Python?
- 15. Haskell evaluación perezosa y Reciclar
- 16. ¿Cuál es la diferencia entre la media perezosa y la media inmediata en el acumulador Boost?
- 17. Clojure números primos secuencia perezosa
- 18. foldRight en infinita estructura perezosa
- 19. ¿Qué es "error de asignación de puntero nulo"?
- 20. ¡La asignación de la pila falla y la asignación del montón tiene éxito! ¿Es posible?
- 21. ¿Por qué esta asignación genérica autorreferencial es ilegal?
- 22. ¿Qué hace esta asignación dinámica?
- 23. La evaluación perezosa y efectos secundarios IO confusión
- 24. ¿Qué es mejor: la identificación generada automáticamente o la asignación de identificación manual en documentos couchdb?
- 25. ¿Es posible rastrear asignación/desasignación?
- 26. ¿Por qué no funciona la evaluación perezosa en esta función R?
- 27. es la asignación de la variable python atómica?
- 28. Método JPA estándar para inicializar la entidad perezosa
- 29. ¿Es posible la carga lenta para una relación no perezosa en Hibernate?
- 30. La operación de asignación de Javascript es copiar referencias?
son los términos "objetos tardíos" y "init perezoso" también? Como en el título de este texto * Java How to Program: Late Objects Version *? Busqué en Google pero no pude encontrar ninguna referencia más allá de ese texto. – hydeph
@hydeph, parece que Deitel tiene dos versiones de ese libro, una con "objetos tardíos", donde los capítulos iniciales están en estilo de procedimiento (e introducen clases/objetos más adelante) y uno con "objetos primitivos", donde las clases/objetos se introducen de inmediato. Están usando "objetos tardíos" y "objetos tempranos" para distinguir entre estos estilos de enseñanza. No tiene ninguna relación con la inicialización perezosa. –