3.2. Lazy Allocation

Intent

Allocate resources, just in time, when they are first needed to improve how they are shared across the system.

AKA

Lazy Initialization, Lazy Allocation, On-Demand Loading, Deferred Loading

3.2.1. Problem

3.2.1.1. Context

The functionality of your application or service may require a resource but it is not needed immediately nor is it a critical requirement.

3.2.1.2. Summary

You have to resolve one or more of the following:

  • You don't know if a resource will be needed when your application or service starts.

  • The resources you are interested in are scarce and need to be shared across the system.

  • There is a long period between your application or service starting and first use of the resource.

  • You'd like to be able to start your component as quickly as possible.

3.2.1.3. Description

The temptation you'll face is to ensure that all the resources that may be needed for your component are allocated early in the lifetime of the component (e.g. at construction). This approach seems straightforward and is easy to understand because all the resources are allocated up front.

However, for resources which have a significant size, using Immortal (see page 53) can be problematic as the resources will not be available to others in the system. If a particular component allocates a large proportion of the available resources then all the time that the component is running it is preventing all other components in the system from using those resources.

Although the allocated ...

Get Common Design Patterns for Symbian OS: The Foundations of Smartphone Software now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.