跳至主要內容
Java 21中的两个值得关注的Bug修复

Java 21中的两个值得关注的Bug修复

在Java 21中,除了推出很多新特性之外,一些Bug修复,也需要注意一下。因为这些改变可能在升级的时候,造成影响。

Double.toString()Float.toString()的精度问题修复

比如:对于Double.String(1e23)

  • 在Java 19后,输出内容为:1.0E23
  • 在Java 18中,输出内容为:9.999999999999999E22

程序猿DD原创大约 1 分钟JavaJavaJava 21
Java 21增强对Emoji表情符号的处理了

Java 21增强对Emoji表情符号的处理了

发现一个 Java 21 中有意思的东西!在java.Lang.Character类中增加了用于确定字符是否为 Emoji 表情符号的 API,主要包含下面六个新的静态方法:

public static boolean isEmoji(int codePoint) {
  return CharacterData.of(codePoint).isEmoji(codePoint);
}

public static boolean isEmojiPresentation(int codePoint) {
  return CharacterData.of(codePoint).isEmojiPresentation(codePoint);
}

public static boolean isEmojiModifier(int codePoint) {
  return CharacterData.of(codePoint).isEmojiModifier(codePoint);
}

public static boolean isEmojiModifierBase(int codePoint) {
  return CharacterData.of(codePoint).isEmojiModifierBase(codePoint);
}
  
public static boolean isEmojiComponent(int codePoint) {
  return CharacterData.of(codePoint).isEmojiComponent(codePoint);
}

public static boolean isExtendedPictographic(int codePoint) {
  return CharacterData.of(codePoint).isExtendedPictographic(codePoint);
}

程序猿DD原创大约 2 分钟JavaJavaJava 21
详解Java G1垃圾回收器

详解Java G1垃圾回收器

G1垃圾回收器是在Java7 update 4之后引入的一个新垃圾回收器,主要目的是用来替代CMS。

G1最大的特点是引入分区的思路,弱化了分代的概念,合理利用垃圾收集各个周期的资源,解决了其他收集器甚至CMS的众多缺陷。从而实现进一步降低暂停时间的同时,兼顾良好的吞吐量。

那么G1垃圾回收器的细节是怎么样的呢?

这里DD找到一个不错的视频,里面包含想的图示说明和代码案例,可以帮助您更好的理解G1垃圾回收器:


程序猿DD原创大约 1 分钟JavaJava
IDEA碰到:VM warning: Sharing is only supported for boot loader...

IDEA碰到:VM warning: Sharing is only supported for boot loader...

做个日常记录,今天调试一个使用Flux和R2DBC的应用,发现使用IDEA启动的时候报了下面的红色警告:

OpenJDK 64-Bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

程序猿DD原创小于 1 分钟JavaJava
Java新特性中的Preview功能如何运行和调试

Java新特性中的Preview功能如何运行和调试

在每个Java新版本发布的特性中,都会包含一些Preview(预览)功能,这些功能主要用来给开发者体验并收集建议。所以,Preview阶段的功能并不是默认开启的。

如果想体验某个Java版本中的Preview功能,您还需要做一些设置才能把程序跑起来。

下面以IDEA 2023.2为例,演示为Java 21开启Preview功能。

第一步:打开setting配置编译参数,按如下图所示:选择Java版本以及增加开启preview的配置参数--enable-preview


程序猿DD原创小于 1 分钟JavaJava
Java 21 新特性:未命名类和实例的Main方法(Unnamed Classes and Instance Main Methods)

Java 21 新特性:未命名类和实例的Main方法(Unnamed Classes and Instance Main Methods)

Java 21引入了两个语言核心功能:

  • 未命名的Java类你说
  • 新的启动协议:该协议允许更简单地运行Java类,并且无需太多样板

下面一起来看个例子。通常,我们初学Java的时候,都会写类似下面这样的 Hello World 程序:

public class HelloWorld {
  
  public static void main(String[] args) {
    System.out.println("Hello, World!");
  }

}

程序猿DD原创大约 2 分钟JavaJavaJava 21
Java 21 新特性:分代ZGC(Generational ZGC)

Java 21 新特性:分代ZGC(Generational ZGC)

在 JDK 21 中,JEP 439(分代ZGC)从 Targeted 状态提升到 Completed 状态。该 JEP 建议,扩展 Z Garbage Collector(ZGC),为年轻对象和老对象维护单独的代,从而提高应用程序的性能。这将使得 ZGC 可以更频繁地收集趋于早亡的年轻对象。


A N M Bazlur Rahman大约 4 分钟JavaJavaJava 21
Java 21 新特性:虚拟线程(Virtual Threads)

Java 21 新特性:虚拟线程(Virtual Threads)

在Java 21中,引入了虚拟线程(Virtual Threads)来简化和增强并发性,这使得在Java中编程并发程序更容易、更高效。

虚拟线程,也称为“用户模式线程(user-mode threads)”或“纤程(fibers)”。该功能旨在简化并发编程并提供更好的可扩展性。虚拟线程是轻量级的,这意味着它们可以比传统线程创建更多数量,并且开销要少得多。这使得在自己的线程中运行单独任务或请求变得更加实用,即使在高吞吐量的程序中也是如此。

创建和使用虚拟线程

在Java 21中创建和使用虚拟线程有多种方法:


程序猿DD原创大约 3 分钟JavaJavaJava 21
2
3
4
5
...
9