你的static final,正拖慢启动
上周给一个交易系统做启动优化,JDK 26 升上去之后,启动时间从 12 秒降到了 7 秒。排查下来,最大的贡献不是 JIT 预热,不是 G1 改进,而是一个不起眼的 JEP 526:懒加载常量(Lazy Constants)。
Java final关键字和不可变性
在我之前写的线程安全那篇内容里,我提到过,在并发编程领域下,为了应付线程安全的问题,需要使用各种同步机制,比如synchronized、volatile等。毕竟如果对象的状态是共享且可变的话,多线程情况下,没有同步机制,代码迟早出问题的。那如果对象的状态是不可变的呢?
静态代码块和构造器的执行顺序,类初始化时机这题隐蔽得很
上周帮部门面一个五年经验的候选人,我在共享文档里贴了段代码,让他口述输出顺序。他答得很快,快到我知道他背过。然后我改了一行,把 new Child() 换成 Child.NAME,他就卡住了。这题的杀伤力从来不在执行顺序本身,而在类初始化的触发时机。
JVM-09: Java 堆:对象的生与死
上一篇收尾时说,下一篇回到线程共享的地盘。这篇就是:Java 堆,JVM 里最大的一块内存,你写下的每一个 new,最终都落在这里。这一篇围绕对象的一生展开:new 一行代码背后发生了什么,内存从哪里划出来,对象在内存里长什么样、有多重、怎么被访问、什么时候死。
Java基础之面向对象: 类和对象详细解析二
定义方法的语法格式如下: [修饰符] 方法返回值类型 方法名(形参列表) { //由零条到多条可执行性语句组成的方法体 }方法语法格式的详细说明如下。
Java基础之面向对象: 类和对象详细解析
Java是面向对象的程序设计语言,类是面向对象的重要内容,我们可以把类当成一种自定义数据类型,可以使用类来定义变量,这种类型的变量统称为引用变量。也就是说,所有类是引用数据类型。
第5章 深入class文件结构
第5章 深入class文件结构大家好,这一章我们来深入class文件结构。刚学编程时老师就介绍说,Java是一种跨平台编程语言,可以"一次编译,到处运行"。但当时我们并不清楚,为什么Java可以跨平台使用?