JDK26中的LazyConstant

前言

LazyConstantJDK26之后引入的新属性,是一个延迟常量,之前的JDK25中的StableValue已经移除了,改成这个了,它本质是一个持有不可变数据的容器,能够实现对象的按需初始化,旨在替代传统复杂且易错的延迟初始化模式

LazyConstant使用

以往开发者为了实现延迟初始化,通常需要使用双重检查锁定,但是 LazyConstant 完美解决了上述痛点,其核心优势包括:

  • 按需初始化 :只在首次调用 get() 方法时才执行初始化逻辑,显著提升应用启动性能。
  • 内置线程安全:JVM 保证初始化过程的线程安全性,开发者无需再编写任何同步代码或双重检查锁定逻辑。
  • JVM 深度优化 :一旦值被初始化,JVM 会将其视为真正的 final 常量,从而开启常量折叠(constant folding) 等高级优化。后续调用 get() 时,JIT 编译器可能直接将结果内联,性能远超传统的 volatile 懒加载方案。
  • 简化代码:消除了繁琐的延迟初始化样板代码,提升了代码的可读性与可维护性。

LazyConstant使用

typescript 复制代码
public class UserService {

    public String say() {
        return "success";
    }
}
csharp 复制代码
public class LazyConstantDemo {

    static void main(String[] args) {
        LazyConstant<UserService> lazyConstant = LazyConstant.of(() -> {
            System.out.println();
            return new UserService();
        });
        UserService a = lazyConstant.get();
        System.out.println(a);
    }
}

输出结果为

总结

LazyConstantJDK26的一个预览属性,但是是线程安全安全的,可以使用看看,使用 LazyConstant 非常简洁,只需通过 LazyConstant.of() 工厂方法传入一个 Supplier 函数即可定义惰性常量。该值在首次访问后会被缓存,且永不改变

相关推荐
萧瑟余晖32 分钟前
Java深入解析篇十七之SpringCloud
java·开发语言
是未才1 小时前
从输入 URL 到页面返回:DNS、路由、TLS 与 HTTP 完整链路
java·后端·计算机网络
ttod_qzstudio1 小时前
Java 常用语法极简通关(五):类与对象——字段、方法、构造器、this 与 static
java·开发语言·python
DevUI团队2 小时前
从“即兴创作”到“规格先行”,华为云码道(CodeArts)代码智能体持续深耕企业级规范驱动开发能力
前端·人工智能·后端
萧瑟余晖2 小时前
Java深入解析篇十七之Spring Security
java·开发语言·spring
weixin_431600443 小时前
NestJS 入门(3):Guard 如何挡住未登录请求?
前端·后端·学习·nest.js
IT_陈寒3 小时前
JavaScript类型转换把我坑惨了,这破玩意真该早点搞明白
前端·人工智能·后端
用户938515635074 小时前
手写一个 LLM Harness 框架:用工程化手段把大模型幻觉踩在脚下
javascript·人工智能·后端
wei_shuo5 小时前
KES 云原生部署与弹性扩展:容器化、Kubernetes编排与自动伸缩
后端
一木之林5 小时前
Python.五.(一)--1. 并发编程、异步IO与多进程
后端