Tag: java 9

Java 9 JavaFX Preloader

在Java 8中,我可以使用以下方法使用预加载器启动JavaFX应用程序: LauncherImpl.launchApplication(WindowMain.class, WindowMainPreloader.class, new String[]{…}); 我更喜欢从代码开始,如上所述,而不是使用部署配置,因为我不希望每次启动应用程序时都启动图形界面,但只有在计算出应用程序运行的某些代码之后GUI模式。 我使用的是“com.sun.javafx.application.LauncherImpl”类,但显然在Java 9中,所有以“com.sun”开头的类都被删除了。 那么,如何在Java 9中使用预加载器启动应用程序?

Java 9,Set.of()和Map.of()varargs重载

我正在研究Immutable集合的工厂方法。 我看到Set.of()方法有10个varargs重载( Map.of()相同)。 我真的不明白为什么会这么多。 最后,无论如何都会调用函数ImmutableCollections.SetN(elements) 。 在文档中我发现了这个: 虽然这会在API中引入一些混乱,但它避免了varargs调用引起的数组分配,初始化和垃圾收集开销。 杂乱的确是值得的性能提升吗? 如果是,那么理想情况下是否会为任何N元素创建单独的方法?

为什么它会锁定lib / modules?

当我从Java 9应用程序启动任何第三方应用程序,例如记事本(但你可以采取其他任何东西),然后退出Java应用程序: import java.io.*; public class LaunchNotepad { public static void main(String[] args) throws IOException { Runtime.getRuntime().exec(new String[] {“C:\\Windows\\notepad.exe”}); } } 启动的第三方应用程序保持锁定Java 9的lib\modules文件。 这使得我们的Java应用程序很难使用私有JRE进行自我更新,因为无法重命名原始目录(包含JRE)。 这是ProcessExplorer(Sysinternals)的截图: 这有点像Java 9的错误(报告为JDK-8194734 ),但有一个解决办法,在Windows上启动应用程序而不锁定lib\modules文件 ,例如通过使用简单启动传递的外部(代理)应用程序参数作为应用程序?

Java 9中的JFrame扩展

在左边的Java 9u4和Windows 7右边的8u144下运行的代码完全相同。 Java 9似乎使窗口更大。 造成这种情况的原因是什么 – JEP 263? 我该如何禁用它? public class SimpleFrame { public static void main(String[] args) { JFrame frame = new JFrame(); frame.getContentPane().add(new JLabel(“Horse”)); frame.setSize(new Dimension(200, 100)); frame.setVisible(true); } }

如何解压缩文件jre-9 / lib / modules?

在JRE-9/lib目录中(至少在Windows上),有一个名为modules的新文件,其大小约为107 MB。 是否可以提取该文件或列出其中的java模块? 我可以看到jdk-9/bin/jmod.exe有一个名为jmod的新工具,但是它用于读取位于jdk-9/jmods .jmod文件,它无法读取文件modules 。

ImmutableCollections SetN实现细节

我很难理解java-9 ImmutableCollections.SetN的实现细节; 具体为什么需要增加两次内部数组。 假设你这样做: Set.of(1,2,3,4) // 4 elements, but internal array is 8 更确切地说,我完全理解为什么在HashMap情况下完成(双重扩展) – 你从来没有(几乎)想要load_factor为1。 值!=1改善搜索时间,因为条目更好地分散到例如桶中。 但是在一个不可变的集合的情况下 – 我无法真正说明。 特别是因为选择内部arrays的索引的方式。 让我提供一些细节。 首先如何搜索索引: int idx = Math.floorMod(pe.hashCode() ^ SALT, elements.length); pe是我们放入集合的实际值。 SALT在启动时只生成32位,每个JVM一次(如果需要,这是实际的随机化)。 我们的例子中的elements.length是8 (4个元素,但这里8个 – 大小加倍)。 这个表达式就像一个负安全的模运算 。 请注意,在选择存储桶时,例如( (n – 1) & hash )在HashMap完成相同的逻辑操作。 因此,如果elements.length is 8对于我们的情况elements.length is 8 ,那么这个表达式将返回任何小于8的正值(0, 1, 2, 3, 4, […]

Java 9是否包含Graal?

我正在读JEP 317 。 它说Graal(一个新的基于Java的实验性JIT编译器)将成为JDK 10的一部分,但后来它说已经可以在JDK 9中使用了。那么,JEP 317的重点是什么呢? Java 9是否包含Graal?

Javadoc如何处理Java 9中模块的可见性?

Javadoc工具基于可访问性修饰符生成文档。 默认情况下,它记录所有public和protected类,字段和方法。 可以使用以下选项更改此设置: -上市 仅显示公共类和成员。 -protected 仅显示受保护的公共类和成员。 这是默认值。 -包 仅显示包,受保护和公共类和成员。 -私人的 显示所有类和成员。 Java 9引入了模块的概念,项目Jigsaw将其应用于现有的JDK。 Mark Reinhold的演讲(关于模块的一系列讨论中的第三篇)展示了public修饰符现在如何具有不同的可访问性级别,具体取决于模块的可见性(通过exports ): 公开给大家 公开但仅限于特定模块 仅在模块内公开 由于现在并非所有公共成员都可以访问,因此继续使用相同的Javadoc生成方案就没有多大意义了。 只有那些暴露在“足够”水平的成员才应该被记录下来。 Javadoc模块是否可识别? 除了上面的命令选项还有处理额外曝光层的命令选项吗? 对于仅暴露给特定模块的公共成员,Javadoc是否列出了这些,如 public static void getDefaultThing() ?

Java 9中的类加载器层次结构

从Java-8开始,我知道类加载器的层次结构如下: – Bootstrap类加载器 – >扩展类加载器 – >应用程序类加载器 Java 9中类加载器层次结构的变化是什么?它是如何工作的?

Java 9 Module系统是否支持可选的依赖项?

背景 在maven中,工件可以声明依赖关系 true 这意味着不需要依赖项,但如果存在则可以使用。 模块系统的状态似乎指定模块只能读取它所需的模块。 问题 Java 9模块系统确实不支持可选的依赖项吗? 为什么不? Java 9模块系统提供了哪些可选依赖项替代方案? 用例 我有一个框架,集成了应用程序可能使用或不使用的各种库。 目前,该框架是一个单独的JAR,它反映了类路径以跳过缺少库的集成代码。 我想我们可以将它分成每个配置的单独模块,但这会导致JAR数量的组合爆炸,因为我们不仅需要为每个可选依赖项单独的JAR,而且对于大多数对都需要单独的JAR可选依赖项…