问题标签 [java-12]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
24912 浏览

java - 使用 Maven 编译并执行 JDK 预览功能

JDK/12 EarlyAccess Build 10中,JEP-325 Switch Expressions 已作为预览功能集成到 JDK 中。表达式的示例代码(在 JEP 中也是如此):

在哪里Day作为枚举

预览语言和 VM 功能 JEP-12已经详细说明了如何在编译和运行时使用javacjava.

如何使用 Maven 试用此功能?

0 投票
1 回答
688 浏览

java - 原始字符串文字 - 删除前导缩进

编辑:原始字符串文字已从 JDK 12 中删除,但我将保留此问题,并在重新引入原始字符串文字时对其进行相应编辑。


在测试原始字符串文字(Java 12 中的预览功能)时,我遇到了以下代码片段:

输出以下内容:

但是,我希望输出类似于以下内容:

删除前导缩进以匹配预期格式的最简单方法是什么?

0 投票
1 回答
759 浏览

java - 为什么不完整的switch表达式编译成功

试用JDK/12 EarlyAccess Build 20,其中JEP-325 Switch Expressions已作为预览功能集成。表达式的示例代码(在 JEP 中也是如此):

我试图按照上一个问题中关于如何使用 Maven 编译 JDK12 预览功能并使用命令行执行上述代码块的相同过程:

出乎我的意料,我收到以下错误:

我知道该文档指出该代码是错误的,并且将注释替换为break 1;解决了它,但我的问题是:

Q1。为什么编译阶段同样成功?这不应该在编译时失败吗?

Q2。我看到如此详细的错误消息的原因是什么?--enable-preview功能可以对此负责吗?

0 投票
4 回答
30717 浏览

java - 错误:java:错误:无效的源版本:13 使用 JDK12 和 IntelliJ

我正在尝试使用 JDK-12 ea 构建一个项目。在尝试执行示例类时:

IDE 抛出读取的错误

错误:java:错误:无效的源版本:13

相关项目配置屏幕:

在此处输入图像描述

模块设置

在此处输入图像描述

SDK

在此处输入图像描述

在此处输入图像描述

编译器设置

在此处输入图像描述 关于 IDE:

尝试将语言级别切换回 12,没有实验性功能,但它以

在此处输入图像描述

我记得最近成功使用了实验功能(不确定确切的 IntelliJ 版本)。除了这个,我还需要配置一些东西吗?

0 投票
2 回答
661 浏览

java - Java 12-GC (JEP 346) 在资源按使用付费的容器环境中,行为是否特别不利?

该 JEP 的既定目标是增强 G1 垃圾收集器,以便在空闲时自动将 Java 堆内存返回给操作系统

由于 G1 努力完全避免完全 GC,并且仅根据 Java 堆占用和分配活动触发并发循环,因此在许多情况下它不会返回 Java 堆内存,除非在外部强制这样做。

那么这在资源按使用付费的容器环境中是否不利?

任何人都可以澄清这一点......

参考:https ://bugs.java.com/bugdatabase/view_bug.do?bug_id=8204089

0 投票
0 回答
177 浏览

java - 使用 Gradle 编译为低于 javac 允许的 Java 级别

我在 Java 12 上踢轮胎,并注意到在javac最低目标 Java 级别提高到 1.7。

你问我为什么要编译成Java 6?

即使我的代码库要求最低 Java 级别为 1.7,我仍然希望我的内核在较旧的 Java 级别编译,以便 JVM 可以启动并且我可以输出更好的错误消息,指示必须使用 Java 7+,而不是更多神秘的不兼容的类版本错误。

展望未来...

Java 6 不是什么大问题,但我主要担心的是如果 Java 只支持 N-5 版本,到 Java 14(大约一年后)我将不再能够编译到 Java 8,这可能仍然是一个非常流行的运行时版本。

我相信 Maven 可以使用toolchains解决这类问题,但 Gradle 是否提供类似的东西?

编辑:我还注意到JEP 182,它尚未获得批准,但如果获得批准将意味着仅支持 N-3 版本。

0 投票
2 回答
657 浏览

java - 从 Java-12 中的 switch 表达式返回泛型值

我想知道是否有从 Java 12 switch 表达式返回泛型类型的选项。

基本代码可能如下所示:

有什么反对这样做的吗?

编辑:

也许是我的案例中更好的例子:我需要几个代表原始和复杂数据结构的类。我还有工厂方法,它DataPointValue基于来自其他系统的枚举和未知值创建它(让我们忘记强制转换异常):

移动这段代码并使用 Java 12 中的 switch 表达式有什么好处吗?

0 投票
1 回答
1365 浏览

java - 如何使用 Java 12 的微基准测试套件?

根据JEP 230: Microbenchmark Suite,Java 12 内置了一个微基准套件。JEP 解释说它基本上是 JMH,但不需要使用 Maven/Gradle 显式依赖它。但是,它没有指定如何访问属于该套件的类/注释以执行基准测试。

我的问题是:

  • 我需要一个特定的 Java 模块module-info.java才能使用这个套件吗?
  • 该套件的类/注释位于哪些包中?
  • 这个套件和 JMH 有什么主要区别吗?
0 投票
1 回答
862 浏览

java - 为什么 JVM 启动 Java 12 会更快一些

这是一个轻微但明显的区别:

作为 Java 12 版本的一部分,有什么特别的改变还是测量错误?


更新

确实 JVM 启动速度更快。感谢LppEddHolger的参考。

JEP 341 - 默认 CDS 档案

当您启动 Java 应用程序时,会加载数千个类,这似乎 JVM 会减慢启动速度。

类数据共享是从 JDK 8 Update 40 开始作为商业功能引入的功能。它允许您将所有启动类打包到特定格式的存档中,之后应用程序启动时间增加。一段时间后,引入了JEP 310:应用程序类-数据共享,这使我们不仅可以对系统类进行相同的操作,还可以对应用程序类进行操作。

对于 JDK 类,它看起来像这样。首先我们用 转储类java -Xshare:dump,然后启动应用程序,告诉它使用这个缓存:java -Xshare:on -jar app.jar。并且启动速度有了一点提升。

-Xshare: dump但是每次都这么写似乎很奇怪,如果在创建JDK发行版的阶段执行此命令的默认结果有点可预测。根据文档,如果 Java 8 发行版是使用安装程序安装的,那么在安装时它应该为您运行必要的命令。但为什么?以及如何处理分发工具包,它不是以安装程序的形式分发,而是以 zip 存档的形式分发?

由于 JDK 12 CDS 存档将由发行版的创建者在链接后立即生成。即使是夜间构建(假设它们是 64 位和本机的,而不是用于交叉编译)。

从 JDK 11 开始,-Xshare: auto默认启用,并且会自动获取此类存档。因此,只需更新到 JDK 12 即可加快应用程序的启动!

0 投票
1 回答
372 浏览

java - Java 12 Shell 无法在 Windows 上正确读取键盘输入

Java Shell 是否改变了它在 Java 12 中读取键盘输入的方式?它有时会错过击键,并且箭头键通常会打印随机字母而不是显示上一行。这发生在 Java 12 中,在 Windows 7 上使用 Oracle 的 OpenJDK。