加载中...
延迟初始化是一种把对象创建、值计算或资源加载推迟到首次真正需要时才执行的技巧。它能减少启动开销和内存占用,避免为可能永远用不到的资源提前付出代价,常用于单例、缓存和 ORM 关联加载。

| 中文名 | 延迟初始化 |
| 英文名 | Lazy Initialization |
| 别名 | 惰性初始化、懒加载 |
| 核心思想 | 首次访问时才创建 |
| 常见搭配 | 单例、代理、ORM |
延迟初始化(Lazy Initialization,又称惰性初始化或懒加载)是一种设计技巧,指把某个对象的创建、字段的赋值或昂贵计算推迟到程序第一次访问它时才进行,而不是在声明或构造阶段就完成。若该资源始终未被使用,则相关成本永远不会发生。
延迟初始化的核心动机是节约:避免在启动时一次性加载所有资源,把开销分摊到实际使用时刻。它常与单例模式结合形成延迟加载单例,也是 ORM 框架处理对象关联时的默认策略,以及虚拟代理模式的基础。许多语言和框架提供了内建支持,例如 Java 的 Lazy 封装、C# 的 Lazy 类型、Kotlin 的 lazy 委托。
典型场景包括:配置或大对象的懒加载;ORM 中对关联实体或集合的按需查询,避免一次性拉取整张对象图;GUI 中面板或标签页在被打开时才构建;缓存中的值在缺失时计算并存入。它对内存敏感或启动速度要求高的应用尤为重要。
问:延迟初始化在多线程下如何保证安全?答:需要确保并发首次访问时只初始化一次,常用双重检查锁定、静态内部类持有者模式,或直接使用语言提供的线程安全惰性封装。
问:延迟初始化会带来什么隐患?答:可能把错误推迟到首次访问时才暴露,增加调试难度;在 ORM 中若会话已关闭再触发懒加载,会抛出延迟加载异常。

| 中文名 | 延迟初始化 |
| 英文名 | Lazy Initialization |
| 别名 | 惰性初始化、懒加载 |
| 核心思想 | 首次访问时才创建 |
| 常见搭配 | 单例、代理、ORM |
登录 后参与讨论
暂无讨论,来发表第一条评论吧