问题标签 [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.
java - 使用 Maven 编译并执行 JDK 预览功能
在JDK/12 EarlyAccess Build 10中,JEP-325 Switch Expressions 已作为预览功能集成到 JDK 中。表达式的示例代码(在 JEP 中也是如此):
在哪里Day
作为枚举
预览语言和 VM 功能 JEP-12已经详细说明了如何在编译和运行时使用javac
和java
.
如何使用 Maven 试用此功能?
java - 原始字符串文字 - 删除前导缩进
编辑:原始字符串文字已从 JDK 12 中删除,但我将保留此问题,并在重新引入原始字符串文字时对其进行相应编辑。
在测试原始字符串文字(Java 12 中的预览功能)时,我遇到了以下代码片段:
输出以下内容:
但是,我希望输出类似于以下内容:
删除前导缩进以匹配预期格式的最简单方法是什么?
java - 为什么不完整的switch表达式编译成功
试用JDK/12 EarlyAccess Build 20,其中JEP-325 Switch Expressions已作为预览功能集成。表达式的示例代码(在 JEP 中也是如此):
我试图按照上一个问题中关于如何使用 Maven 编译 JDK12 预览功能并使用命令行执行上述代码块的相同过程:
出乎我的意料,我收到以下错误:
我知道该文档指出该代码是错误的,并且将注释替换为break 1;
解决了它,但我的问题是:
Q1。为什么编译阶段同样成功?这不应该在编译时失败吗?
Q2。我看到如此详细的错误消息的原因是什么?该--enable-preview
功能可以对此负责吗?
java - Java 12-GC (JEP 346) 在资源按使用付费的容器环境中,行为是否特别不利?
该 JEP 的既定目标是增强 G1 垃圾收集器,以便在空闲时自动将 Java 堆内存返回给操作系统
由于 G1 努力完全避免完全 GC,并且仅根据 Java 堆占用和分配活动触发并发循环,因此在许多情况下它不会返回 Java 堆内存,除非在外部强制这样做。
那么这在资源按使用付费的容器环境中是否不利?
任何人都可以澄清这一点......
参考:https ://bugs.java.com/bugdatabase/view_bug.do?bug_id=8204089
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 版本。
java - 从 Java-12 中的 switch 表达式返回泛型值
我想知道是否有从 Java 12 switch 表达式返回泛型类型的选项。
基本代码可能如下所示:
有什么反对这样做的吗?
编辑:
也许是我的案例中更好的例子:我需要几个代表原始和复杂数据结构的类。我还有工厂方法,它DataPointValue
基于来自其他系统的枚举和未知值创建它(让我们忘记强制转换异常):
移动这段代码并使用 Java 12 中的 switch 表达式有什么好处吗?
java - 如何使用 Java 12 的微基准测试套件?
根据JEP 230: Microbenchmark Suite,Java 12 内置了一个微基准套件。JEP 解释说它基本上是 JMH,但不需要使用 Maven/Gradle 显式依赖它。但是,它没有指定如何访问属于该套件的类/注释以执行基准测试。
我的问题是:
- 我需要一个特定的 Java 模块
module-info.java
才能使用这个套件吗? - 该套件的类/注释位于哪些包中?
- 这个套件和 JMH 有什么主要区别吗?
java - 为什么 JVM 启动 Java 12 会更快一些
这是一个轻微但明显的区别:
作为 Java 12 版本的一部分,有什么特别的改变还是测量错误?
更新
确实 JVM 启动速度更快。感谢LppEdd和Holger的参考。
当您启动 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 即可加快应用程序的启动!
java - Java 12 Shell 无法在 Windows 上正确读取键盘输入
Java Shell 是否改变了它在 Java 12 中读取键盘输入的方式?它有时会错过击键,并且箭头键通常会打印随机字母而不是显示上一行。这发生在 Java 12 中,在 Windows 7 上使用 Oracle 的 OpenJDK。