Java交叉编译-最新JDK的优点

chrixm

我维护一个Java应用程序,在分发它之前我一直使用JDK 1.6对其进行编译,因为这是我的应用程序所需的最低版本-我不使用任何较新的功能。我看不到在更高版本中编译它的意义,或者较旧的JRE无法运行它(即,使用Java 1.6的Mac OSX上的用户)。

现在,鉴于最近有关Java的新闻以及JDK更高版本中的错误修复,最好使用以下语法使用最新的JDK交叉编译它:

javac -Xlint -source 1.6 -target 1.6 -bootclasspath jre6/lib/rt.jar MyClass.java

这将产生一个在JRE 1.6下可以正常运行的Class文件,但是首先使用JDK 1.6有什么好处吗?我是在利用新JDK的任何优化功能还是生成相同的字节码?

荒诞的心

您应考虑以下几点:

  1. 字符串连接的字节码更改了几次。它不再是性能下降的陷阱。但是我不确定这是否来自字节码表示的重构或来自更改VM。
  2. 旧的(系统)JDK / JRE可能会在开发计算机上带来安全风险。如果开发人员正在使用过时的JDK / JRE,则他可能容易受到正在执行的恶意软件的攻击。
  3. 客户端上过时的Java版本使用户面临安全风险。如果您允许用户使用旧的Java版本,他们将这样做。这可能是安全风险。
  4. 不再公开支持Java 6。安全问题是既没有通知用户应该更新他的Java版本,也没有强迫他这样做。请记住,Java在安全漏洞的前三名中。
  5. 您可以在为1.6目标编译时使用Java 1.7功能。使用-source 1.7-target 1.6您可以使用语言功能,例如int i = 0b011
  6. JDK附带的工具会更新。也许有用于开发Java应用程序的新工具,例如在某个时候将Java VisualVM添加到了JDK。

从清单中可以看出,我认为使用当前JDK的优势胜过使用旧JDK的优势。

编辑:我调查了一下,我建议您安装适合您的目标版本的JDK。由于bootstrap / ext类路径的原因,在交叉编译时仍然需要JDK。有关更多信息,请参见如何针对较旧的平台版本进行交叉编译该站点还指出,不同的JDK之间的编译存在差异(倒数第二段),并建议使用与您的目标版本相关的JDK(最后一段)。同样相关的可能是javac文档

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

JDK交叉编译使用哪个版本的JAX WS和JAXB?

来自分类Dev

windows上ubuntu的java交叉编译器

来自分类Dev

交叉编译Qt 5

来自分类Dev

Raspberry PI的交叉编译

来自分类Dev

交叉编译Pandaboard的Qt

来自分类Dev

交叉编译ARM板?

来自分类Dev

钢筋:交叉编译选项

来自分类Dev

Android库交叉编译

来自分类Dev

如何交叉编译Python?

来自分类Dev

Qt交叉编译

来自分类Dev

交叉编译Python

来自分类Dev

交叉编译libSDL

来自分类Dev

交叉编译Pandaboard的Qt

来自分类Dev

交叉编译-平台与架构

来自分类Dev

交叉编译libSDL

来自分类Dev

交叉编译libSDL

来自分类Dev

Beaglebone交叉编译

来自分类Dev

鱿鱼交叉编译

来自分类Dev

交叉编译星号的问题

来自分类Dev

交叉编译Linux内核

来自分类Dev

snapcraft交叉编译

来自分类Dev

Android库交叉编译

来自分类Dev

GPU 的 Halide 交叉编译

来自分类Dev

ARM 的 Qt 交叉编译

来自分类Dev

交叉编译平台

来自分类常见问题

Visual Studio代码显示“需要运行Java 11或更高版本。请下载并安装最新的JDK”

来自分类常见问题

Visual Studio代码显示“需要运行Java 11或更高版本。请下载并安装最新的JDK”

来自分类常见问题

Visual Studio代码显示“需要运行Java 11或更高版本。请下载并安装最新的JDK”

来自分类常见问题

Visual Studio代码显示“需要运行Java 11或更高版本。请下载并安装最新的JDK”