标签: java-14

为什么 Java 14 不是 LTS?

Java 14是非 LTS

考虑到 6 个月发布的新版本序列,并且 8 和 11 是 LTS,Java 14 不应该是下一个 LTS 版本吗?

还是纯粹基于 Java 架构师来决定他们为 LTS 选择哪个?

我确实在网上搜索过,但找不到答案。

java lts java-8 java-11 java-14

54
推荐指数
2
解决办法
2万
查看次数

Java 记录是否旨在最终成为值类型?

recordJDK 14 中引入的预览功能 (JEP 384) 是一项伟大的创新。它们使创建简单的不可变类变得更加容易,这些类是纯粹的值集合,而不会丢失各种库中通用元组类中固有的上下文。

由 Brian Goetz ( https://openjdk.java.net/jeps/384 )编写的 JEP 描述很好地解释了意图。然而,我期待与最终引入的值类型有更密切的联系。值类型的最初目标是相当广泛的:通过消除这些类型的对象不需要的所有开销(例如引用间接、同步),本质上允许对那些最重要的对象进行潜在的显着性能改进。此外,它还可以提供句法细节,例如myPosition != yourPosition代替!myPosition.equals(yourPosition).

似乎记录的限制与潜在值类型所需的限制类型非常接近。然而,JEP 在动机中没有提及这些目标。我试图找到有关这些审议的任何公开记录,但没有成功。

所以我的问题是:记录是否旨在成为可能向值类型转变的一部分,还是这些完全不相关的概念和未来的值类型可能看起来完全不同?

我提出这个问题的动机是:如果记录成为语言的永久部分,那么如果在未来的版本中可能会带来显着的性能优势,那么在代码中采用它们将是一个额外的动力。

java java-14 java-record

45
推荐指数
2
解决办法
2411
查看次数

Lombok getter/setter 与 Java 14 记录

我喜欢Lombok项目,但最近我正在阅读并尝试 Java 14 的一些新功能。

在新功能中,有一个record关键字,它允许创建一个已经内置以下功能的类:构造函数、私有 final 字段、访问器、equals/hashCode、getter、toString 方法。

现在我的问题是:是更好地依赖 Lombok 的功能还是应该开始使用记录功能:

最好使用这个:

record Person (String name, String surname) {}
Run Code Online (Sandbox Code Playgroud)

或者那个:

@AllArgsConstructor
@ToString
@EqualsAndHashCode
public class Person {
  @Getter private int name;
  @Getter private int surname;
}
Run Code Online (Sandbox Code Playgroud)

这两种方法的优缺点是什么?

java getter lombok java-14 java-record

37
推荐指数
4
解决办法
6586
查看次数

Java 14 中的 NullPointerException 与其前身有何不同?

Java SE 14 引入的重要特性之一是Helpful NullPointerExceptions,它与NullPointerException. 是什么让NullPointerExceptionJava SE 14 比它的前身更有用?

java nullpointerexception java-14

33
推荐指数
3
解决办法
2470
查看次数

应用程序缓慢,JVM 在单 CPU 设置和 Java 12+ 时频繁挂起

我们有一个客户端应用程序(经过 10 多年的开发)。它的 JDK 最近从 OpenJDK 11 升级到了 OpenJDK 14。在单 CPU(禁用超线程)的 Windows 10 设置(以及只有一个可用 CPU 的 VirtualBox 机器内)上,与 Java 11 相比,应用程序启动速度相当慢。此外,它大部分时间使用 100% 的 CPU。我们还可以通过将处理器关联设置为仅一个 CPU ( c:\windows\system32\cmd.exe /C start /affinity 1 ...)来重现该问题。

在我的 VirtualBox 机器中以最少的手动交互启动应用程序和执行查询的一些测量:

  • OpenJDK 11.0.2:36 秒
  • OpenJDK 13.0.2:~1.5 分钟
  • OpenJDK 13.0.2 与-XX:-UseBiasedLocking:46 秒
  • OpenJDK 13.0.2 与-XX:-ThreadLocalHandshakes:40 秒
  • OpenJDK 14:5-6 分钟
  • OpenJDK 14 -XX:-UseBiasedLocking:3-3.5 分钟
  • OpenJDK 15 EA Build 20:~4.5 分钟

只更改了使用的 JDK(和提到的选项)。(-XX:-ThreadLocalHandshakes在 Java 14 中不可用。)

我们尝试记录 JDK 14 对-Xlog:all=debug:file=app.txt:uptime,tid,level,tags:filecount=50 …

java freeze java-14

29
推荐指数
2
解决办法
1774
查看次数

从 Java 14 开始,@Serial 注释的用途是什么

Java 14@Serialjava.io包中引入了一个新的注解。它在 API 文档中的简要说明:

Indicates that an annotated field or method is part of the serialization mechanism defined by the Java Object Serialization Specification.

As far as I understand the annotation is used for the compile-time validation (similarly to @Override) to check whether the serialization mechanism methods and fields are used correctly. What I don't understand, does the annotation affect the de/serialization itself as long as it is a part of the serialization mechanism? …

java serialization java-io deserialization java-14

28
推荐指数
2
解决办法
1341
查看次数

Java 14 记录文档中“浅不可变”的含义

我正在阅读Records的文档, 但不理解“浅不可变”一词。我们所说的浅不可变是什么意思?如果它是不可变的,为什么我们需要一个复制构造函数?为什么有两个“Hello World!”?

对于所有记录类,以下不变量必须成立:如果记录 R 的组件是 c1、c2、... cn,那么如果记录实例被复制如下:

 R copy = new R(r.c1(), r.c2(), ..., r.cn());  // copy constructor ?
Run Code Online (Sandbox Code Playgroud)

那么一定是这样的r.equals(copy)

java java-14 java-record

26
推荐指数
2
解决办法
1565
查看次数

发布 Java-14 getter/setter 命名约定

Java 14 引入了记录功能。Record 创建与字段同名的 getter,因此可以编写print(person.name())例如。但是旧的 Java bean 约定规定应该将此方法命名为getName().

在同一个代码库中使用这两种样式看起来不太好。将所有内容迁移到记录是不可能的,因为它们太有限而无法替换所有用例。

是否有任何官方或半官方指南如何在新代码中以 Java 14 命名 getter 和 setter?

java getter naming-conventions java-14 java-record

23
推荐指数
2
解决办法
2832
查看次数

如何记录 Java Record 参数?

应该如何记录Java Record参数?我指的是最终成为构造函数参数、类字段的参数。

我试过:

/**
 * @param name the name of the animal
 * @param age the age of the animal
 */
public record Animal(String name, int age)
{
}
Run Code Online (Sandbox Code Playgroud)

但 IntelliJ IDEA 将@params标记为错误。我找不到有关这应该如何工作的在线示例。我发现的最接近的讨论是https://bugs.openjdk.java.net/browse/JDK-8225055

我发现JDK 中的一些单元 测试似乎暗示这应该有效。也许这是一个IDE错误?

我使用的是 OpenJDK 14+36-1461,IDEA 2020.1。

以防万一,我针对 IDEA提交了错误报告

java javadoc intellij-idea java-14 java-record

20
推荐指数
1
解决办法
720
查看次数

您是否需要覆盖记录的 hashCode() 和 equals() ?

假设以下示例:

public record SomeRecord(int foo, byte bar, long baz)
{ }
Run Code Online (Sandbox Code Playgroud)

我是否需要覆盖hashCodeequals如果我要将所述对象添加到 a 中HashMap

java java-14 java-record

20
推荐指数
2
解决办法
1353
查看次数