java类文件版本之间有什么区别

时间:2014-04-28 12:32:22

标签: java maven jvm

在maven的文档中写了

https://maven.apache.org/plugins/maven-compiler-plugin/

  

"另请注意,目前默认的源设置为1.5和   默认目标设置为1.5,与您运行Maven的JDK无关   用。如果要更改这些默认值,则应设置source和   如设置Java的-source和-target中所述的目标   。编译器"

我们使用的java版本是java 7。

如果我将目标settigs更改为1.7会有什么好处?

代码运行得更快吗?

内存使用量会减少吗?

2 个答案:

答案 0 :(得分:4)

Java 7意味着JDK / JRE 1.7。但是,真正的名称是Java 7(1.X是从5之前遗留下来的旧命名约定和/或是指内部版本号)。

目标版本意味着您编译字节码以符合特定Java版本的规范(支持的功能)。因此,如果要编译将在运行java 1.6 JVM的计算机上运行的代码,则需要编译针对Java 1.6的代码,并且您应该将自己限制为可用于java 1.6的语法/选项。

否则您将获得java min / max版本。内存使用情况取决于运行代码的实际JVM以及它是服务器JVM还是标准JVM。

通常,您应该针对目标计算机JVM支持的目标而不是更高目标。您的代码也必须不使用在比您的目标版本更高版本中引入的功能(例如1.6中的钻石运算符,因为它是在1.7)中介绍。

更新:关于命名约定:

看看http://en.wikipedia.org/wiki/Java_version_history

非常有趣的是,实际上Java 5之后的命名约定从1.5改为5.

  

代号虎。最初编号为1.5,仍然用作   内部版本号。数字改为"更好地反映了   J2SE的成熟度,稳定性,可伸缩性和安全性。"

Versions - from wikipedia

  • JDK Alpha和Beta(1995)
  • JDK 1。0(1996年1月23日)
  • JDK 1。1(1997年2月19日)
  • J2SE 1。1(1998年12月8日)
  • J2SE 1。3(2000年5月8日)
  • J2SE 1。1(2002年2月6日)
  • J2SE 5。0(2004年9月30日)
  • Java SE 6(2006年12月11日)
  • Java SE 7(2011年7月28日)
  • Java SE 8(2014年3月18日)
  • Java SE 9
  • Java SE 10

答案 1 :(得分:2)

编译器几乎不做任何优化,你使用的版本几乎没有性能差异。

主要区别在于不同版本中可用的功能。 Java 8具有比Java 7更多的功能,Java 7具有超过Java 5.0的功能。如果您想使用更新的功能,则需要更新的版本,但如果您只使用旧版本,则会在运行时对性能产生影响。

运行代码的JVM决定了性能。通常,较新的版本执行得更好,但Java 8可能会或可能不会比Java 7更快,因为它是新的。一旦它出来一段时间它可能比Java 7更快。