- 博客(25)
- 收藏
- 关注
原创 Java 24新特性:模块导入申明
该特性为预览特性,在Java23中首次作为预览特性,并在Java25中成为正式特性。其目的是减少包导入申明的冗余。
2025-12-30 11:31:09
244
原创 Java24新特性:jlink工具在不依赖JMOD的情况下链接运行时镜像
目录里找重复的内容,这样就减小了下载大小和磁盘占用,于是给现在的微服务部署和容器化环境都带来了益处,甚至CI/CD构建节点的存储压力也减小了。而对于开发者来说是无感知的,因为jlink命令没有变化。该特性的目的是优化JDK的打包和分发方式。其允许 jlink 工具在不依赖预先打包好的JMOD文件的情况下创建自定义运行时镜像,从而减小JDK的体积。JMOD文件与JDK运行时中的类文件内容完全重复,但却以不同的格式存储了两次,剔除JMOD后,jlink 直接读取JDK运行时镜像中的类文件,而不是去。
2025-12-19 10:03:45
303
原创 Java24新特性:灵活的构造器
该特性允许在构造函数中super()或this()之前出现语句,在之前的这些语句可以初始化字段,但不能引用正在构造的实例。首次预览,该次预览没有重大变化,并在Java25的。:该特性为预览特性,在Java22中的。由于是预览特性,需要打开预览。
2025-11-30 10:00:00
432
原创 Java 24新特性:去除固定后的虚拟线程同步
在JDK 21引入虚拟线程后,如果在synchronized同步块内发生I/O等阻塞操作,承载虚拟线程的平台线程(载体线程)会被阻塞,无法去执行其他虚拟线程的任务,这就是“固定”。JEP 491通过修改JVM底层对synchronized的实现,使得虚拟线程在同步块中阻塞时,也能释放其占用的平台线程,让这个平台线程可以去执行其他虚拟线程。写代码验证一下,通过监控线程状态,确认承载虚拟线程的平台线程在虚拟线程阻塞时有没有被固定。使用JDK Flight Recorder记录虚拟线程固定事件。
2025-10-30 16:28:47
186
原创 Java 24新特性:移除ZGC的非分代模式
在Java21的JEP439中为ZGC添加了分代模式,并在Java23的JEP474把ZGC的分代模式设置为默认,在Java24中移除了非分代模式,因为在大多数场景,分代模式是更好的解决方案。在Java24执行-XX:+UseZGC -XX:-ZGenerational。在Java23执行-XX:+UseZGC -XX:-ZGenerational。在Java24执行-XX:+UseZGC -XX:+ZGenerational。
2025-10-21 11:36:19
354
原创 Java 24新特性:作用域值
作用域值的第四次预览,在Java20的JEP429开始孵化,并将在Java25的JEP506成为正式特性。通常常见的方法间数据传递都是通过传递参数的方式,这就使得方法中不会直接用到的参数也需要传递。还有通过ThreadLocal在调用栈的方法间共享数据的方式,然而ThreadLocal也有其缺陷。:即使是final也是可变的。final修饰的是变量的引用,而不是变量所指向的对象本身。所以当使用final修饰符时,重新new一个对象会报错,但是可以通过set()方法去修改。
2025-09-19 14:05:32
160
原创 Java 24新特性:Patterns,instanceof和switch中的原始类型
Patterns, instanceof和switch中的原始类型第二次预览。此次预览和Java23中。中第一次预览内容一样,没有变化,并将在Java25做第三次预览。
2025-08-31 09:59:04
291
原创 Java 24:SecurityManager将被永久禁用
该特性为一个正式特性,不论客户端还是服务端,SecurityManager已经不再是安全方面的首选,在Java17的JEP411被标注为Deprecated,在Java24将其禁用。这里发现os.name也读取出来了,这是因为Java的安全策略默认包含了一些基础权限,如果换成file.encoding,则需要添加额外的读取授权。试用一下SecurityManager,先写一段代码打印SecurityManager,并读取文件,打印其内容,最后打印一下os.name属性。
2025-08-22 10:28:48
464
原创 Java 24新特性:提前类加载和链接
打包成jar,运行java -XX:AOTMode=record -XX:AOTConfiguration=app.aotconf -cp class-loading-linking-1.0-SNAPSHOT.jar org.example.Main,记录AOT(Ahead-of-Time)配置到app.aotconf文件中。:该特性为一个正式特性,目的是优化启动时间,大部分应用在每次启动时都加载相同的类,通过监控应用在一次启动中加载和链接的所有类,优化启动和预热所花的时间。
2025-06-30 16:57:08
234
原创 Uniapp HBuilderX本地打包Android应用报错
这是一个在ES2021中引入的新特性,逻辑空值赋值(?=),这个运算符用于当变量为 null 或 undefined 时,给它赋一个默认值。最后发现,很早之前用Homebrew安装过node,在/usr/local/bin中有老版本的npm和node,删除后就正常了。HBuilderX版本: 4.57。node版本需要15及以上才支持。仍然报错,似乎没有生效。
2025-06-26 16:38:49
246
原创 Java 24:密钥派生函数API
HKDF是HMAC-based Extract-and-Expand Key Derivation Function的缩写,用于从输入的较短初始密码派生出更长的密钥,过程保证随机性,从而使密钥满足密码强度要求。输入的初始密码可以是任意长度的密钥,生成的也是可变长度的密钥。:该特性为一个预览特性,将在Java 25成为正式特性。目的是为密钥派生函数引入API,使开发的应用可以使用基于HMAC的提取和扩展密钥派生函数(HKDF)和Argon2。由于该特性是预览特性,默认是关闭的,需要先打开预览特性。
2025-06-11 15:49:20
314
原创 Java 24:准备限制对JNI的使用
该特性会在使用和时发出警告,目的是为将来的版本做准备,将来的版本会在默认情况下不允许使用JNI和FFM API,需要手动开启。
2025-05-21 14:41:07
429
原创 Java 24新特性:对象头压缩
该特性为实验特性,目的是减小64位HotSpot JVM中的对象头部,从96 - 128bits之间减小到64bits(32位平台不会变化),减少GC压力。该特性还不稳定,所以默认是关闭状态,需要手动开启。
2025-04-25 10:00:00
278
原创 Java 23把sun.misc.Unsafe中访问内存的方法标注为Deprecated
虽然sun.misc.Unsafe类及其非内存访问的方法不会被一起移除,但此次标注就是为了在以后的版本逐步将其移除,也许是时候说再见了。其替代的方式是VarHandle和MemorySegment,java.lang.invoke.VarHandle在JDK9引入,提供堆内内存的操作方法,而java.lang.foreign.MemorySegment在JDK22成为正式特性,提供堆外内存操作方法。
2025-03-29 12:36:56
547
原创 我的创作纪念日
在处理问题的时候,过程可能是零散的,但在写作时,需要重新整理思路逻辑,这个过程对自己还是很有帮助的,锻炼了思维和表达能力,并且为了记录下来,有些细节是需要深入思考并验证的,感觉这比单纯的解决问题又进了一步,过程中也收获了不少。以前在工作中遇到的问题,解决了就过去了,也不会想着去写点内容记录一下,后来发现时间久了后,当时很清楚的事情也会变得模糊,甚至一点都想不起来了,所以第一篇只是一次开发中找问题的过程记录。工作和写作也成了相辅相成的事,工作为写作提供了点点滴滴,写作也使自己提升从而更好的工作。
2025-03-25 10:04:57
142
原创 Java 23新特性:流收集器
流收集器该特性为第二次预览,在Java 22中首次预览,并将在Java 24中成为正式特性。Java 8时引入的首个lambda表达式API,java.util.stream,该特性的目的是为Stream API提供自定义的中间操作。在该特性之前,Stream提供了一些固有的操作,如过滤,排序等,然而稍复杂的逻辑就很难用Stream实现。假设有这样的场景,在月销售统计数据中找到连续两个月增长的数据。
2025-03-03 10:55:55
247
原创 Java 23新特性:Vector API
Vector API,该特性为第八次孵化,早在Java 16就以孵化状态引入首次迭代,并将在Java 24做第九次孵化。这里的Vector并不是java.util下的对象数组Vector,Vector API是指用于同时处理多个数据计算的API,其目的是利用Single Instruction Multiple Data(SIMD)提升计算性能。虽然是第八次孵化,但相比较Java 22的第七次孵化并没有太大变化。
2025-02-17 10:00:00
636
原创 Java 23新特性:Markdown编写JavaDoc
Markdown文档注释,该特性为正式特性,目的是写JavaDoc时用现流行的Markdown替代HTML和@标签的混合(该特性不能自动把已有的注释转换为Markdown语法)。
2025-02-05 15:03:46
413
原创 Java 23新特性:Class-File API
Class-File API,该特性为第二次预览,在Java 22中首次预览,并将在Java 24中成为正式特性。目前已经存在一些工具可以处理类文件,例如ASM,BCEL,Javassist。该特性不是为了解决效率或代码分析问题,也不是Core Reflection API的扩展。该特性的出现只是为了提供一个标准的类文件处理API,最终把JDK内部的ASM库移除。想象一下这样的场景,一个老的没有源码的项目,现在被要求每个方法执行前后都输出一下日志并记录执行时间。
2025-01-24 11:24:43
664
原创 Java 23新特性:JEP 455 Patterns,instanceof和switch中的原始类型
Patterns,instanceof和switch中的原始类型,该特性为一个预览特性。Patterns是指模式匹配,instanceof的模式匹配在。该特性增加了switch在条件语句使用的场景。这里的if表达式是:检测count是不是byte类型,如果是,就把count转换为byte并把值绑定到byteCount。并在Java 21成为正式特性。,Java 16成为正式特性,
2025-01-15 15:40:49
527
原创 ApplicationContextAware接口的set方法执行问题,及Spring注释扫描spring bean获取失败
在ApplicationContextProvider类加载过程中,静态方法在初始化阶段加载到方法区,然而在使用ApplicationContext获取bean的时候,是通过类名直接调用的静态方法,只要Api的创建在ApplicationContextProvider之前,此时ApplicationContextProvider没有在堆中分配内存并实例化,也就没有调用setApplicationContext方法初始化ApplicationContext。在设计时,可以尽量让类之间没有加载顺序的依赖关系。
2024-11-13 16:49:16
1015
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅