再探Java 7:最新特性更新、代码示例及性能测试

原创
开发 后端
本文包括Java 7的最新更新,代码示例和对之前版本Java的性能比较等。我们可以发现,Java 7在语言、内核和客户端方面的改进和提升相当明显。

【51CTO独家特稿】如果说今年Java开发平台有什么大事儿,那就要数将于年底发布的Java 7了。之前51CTO曾报道过Java 7已经完成的七大新功能,包括新增的垃圾回收器G1JVM动态语言支持以及模块化等等(更多关于Java 7的报道可以参考51CTO专题:Java 7,下一代Java开发技术详解)。进入2010年,Java 7有哪些新的进展?这些新的特性更新对我们有哪些好处?该如何使用?Java 7的性能如何?本文将给你答案。

这里的内容主要包括其***更新、一些代码实例、跟以前版本的Java进行性能比较需要参考的一些基准、以及什么时候它才会发布等信息。

首先,让我们来看最重要的事情。为了确定JDK 7中有哪些语言方面的微小变化,有关人员建立了一个名叫Project Coin的项目。描述了最终的五个变化(比五个多一点)。

Java 7更新内容如下所示:

◆允许在switch中使用字符串

◆自动资源管理

◆通用实例创建来改进类型推断(diamond)

◆简化的Varargs方法调用

◆更好的整型文字综合性建议

◆Collections集合的语言支持

◆JSR292的语言支持

在the OpenJDK 7特性页面中,你还可以看到其他的功能。

这些功能分为不同的种类:

◆虚拟机(VM)

◆压缩的64位对象指针

◆G1垃圾回收器GC(G1)

◆JSR 292:非Java语言的虚拟机支持(动态调用,InvokeDynamic)

语言方面(lang)

◆SR 294:模块化编程的语言以及虚拟机支持

◆JSR 308:Java类型注释

◆语言微小增强(我所谈论的Project Coin)

◆JSR TBD: Project Lambda

内核(core)

◆模块化(Jigsaw项目)

◆对类加载器的结构进行升级

◆关闭URLClassLoader的方法

◆Unicode 5.1标准

◆并行以及集合的升级(jsr166y)

◆JSR 203:Java平台(NIO.2)的更多新型I/O API

◆SCTP (流控制传输协议,Stream Control Transmission Protocol)

◆SDP (套接字直接协议,Sockets Direct Protocol)

◆椭圆曲线加密技术(ECC)

客户端(client)

◆Java 2D的XRender管道

◆转发端口6u10部署特性

◆为6u10图形功能创建新的平台API

◆Swing的Nimbus外观和感觉

◆Swing的JLayer元件

网络(web)

◆更新XML的栈

就像你所看到的,这涉及了很多东西。几个月前,我亲自尝试了新的Garbage Collector (GC),其性能表现给我留下了非常深刻的印象。不幸的是,JVM几个小时就会崩溃一次,所以这个产品不能使用JVM。虽然在Java 1.6中也可以使用这个GC,但也会出现同样的问题,经常会出现崩溃。

我想,这就是Java1.7增加新特性的原因。那么,现在我们***去看一些代码实例。#p#

Java 7新特性的代码实例

下面列出的大多数例子都是来源于Joe Wright博客中(Java7中的新语言特性)的高水平文章。

集合的语言支持

在这里我们主要讲的是,当创建一个List、Set或者Map的时候,你怎样尽量少写代码。你不必先实例化Object,然后再给Collection添加元素。你现在只需1行代码就可以完成。

  1. List list = ["item"];  
  2. String item = list[0];  
  3.  
  4. Set set = {"item"};  
  5.  
  6. Map map = {"key" : 1};  
  7. int value = map["key"];  

自动资源管理

由于try / catch语句的原因,冗长的代码令人非常头痛。你或许会喜欢这个全新的特性。

实际上,下面这些代码:

  1. BufferedReader br = new BufferedReader(new FileReader(path));  
  2. try {  
  3.    return br.readLine();  
  4. finally {  
  5.    br.close();  
  6. }  

转变成了如下这种形式:

  1. try (BufferedReader br = new BufferedReader(new FileReader(path)) {  
  2.    return br.readLine();  
  3. }  

通用实例创建来改进类型推断(diamond)

当你把对象的接口申明指定成范型后,你在对象实例化时不得不再指定一次。现在,你不必如此了,因为你可以这样:

  1. Map> map = new HashMap<>();  

数值文字的加强

我不敢肯定这个对大多数人都有用。你可以这样做:

  1. int billion = 1_000_000_000; 

允许在switch中使用字符串

这个无需解释,其意思很明确。

  1. String availability = "available";  
  2. switch(availability) {  
  3.  case "available":  
  4.     //code  
  5.     break;  
  6.  
  7.   case "unavailable":  
  8.     //code  
  9.     break;  
  10.  
  11.   case "merged":  
  12.     //code  
  13.  
  14.   default:  
  15.     //code  
  16.     break;  
  17. }  

二进制文字

你可以使用前缀0b创建二进制文字

  1. int binary = 0b1001_1001; 

以上这些就是Java1.7的代码实例。如果有人能给我指出还有哪些没有包含进去,那就更好了。我敢肯定,已经有其他的开发人员对此进行了关注。

Java 1.7的性能表现

Java 7的性能有多大的提升?这里我们来针对Java 7做一个测试,内容如下。在一台装有ArchLinux系统的Macbook Pro电脑上(因特尔Duo CPU T7700,主频2.40GHz,有两年的使用时间)运行了这些测试。内存是2Gb的,把Heap Size设置成了728m(-Xms728m -Xmx728m)。

◆测试1 为一个List添加100万个字符串值(String字符串是一个UUID,是用UUID.randomUUID()产生的)。

◆测试2 带有100万键、值对的HashMap。每个键、值对通过并行线程进行计算。键是一个UUID,值int是用Math.random()产生的。

◆测试3 把100万个ArrayList条目打印到一定数量的文件(1000个)中。把条目写进恰巧并行的不同文件中。

我只比较了Java1.6 (1.6.0_19) 和 Java 1.7 (b87)。后来根据评论的要求,我把Java1.5也添加了进来,但是并没有添加Java1.4,因为它的时间太久远了。

结果如下所示:

Java1.7性能测试 

Java 1.5

Java 1.6

Java 1.7

Test 1

10,698 

9,481

9,328

Test 2

69,827

37,935

36,636

Test 3

26,931

30,868

27,383

显然,不同版本之间的性能差异并不是特别大。更多关于Java 7性能方面的测试可以参考51CTO之前的报道《Java1.7性能测试比较

Java 7的发布日期

在2009年11月的时候,Java1.7计划是在2010年9月发布,到那时还将发布3个里程碑版本。其中,里程碑6在build 84版中已经完成,里程碑7的***个测试版B85也计划在2010年3月4日完成,而本文使用的B87版本已在2010年3月25日发布。这样看起来,Java 1.7很有可能在2010年9月发布。让我们等待吧。 

 

【编辑推荐】

  1. 走进Java 7中的模块系统
  2. Java 7的***类函数:学习闭包的使用
  3. Java 7新功能代码范例
  4. 专题:JVM详解 Java虚拟机原理与优化

 原文:Java 1.7 - What's new? Release date, code examples and performance  作者:inebium

责任编辑:佚名 来源: 51CTO.com
相关推荐

2009-08-31 18:40:01

Java 7新功能

2010-05-28 09:14:52

Linux性能测试工具

2010-05-13 08:57:22

jQuery 1.4

2009-02-20 16:53:07

Windows 7BetaBug

2010-03-26 15:30:57

CentOS源代码

2009-03-13 19:21:21

Windows 7性能测试

2009-01-07 13:11:13

Java 7Java SEJava

2011-08-01 16:24:04

XCode CodeTimer 测试

2009-11-12 14:10:04

2024-03-06 18:09:06

Linux性能工具

2024-09-02 08:31:46

2009-08-05 08:46:04

Windows 7性能测试

2009-08-07 08:33:33

Windows 7最终版

2024-05-17 08:42:52

AttributeMyClass方法

2021-12-29 10:30:15

JMH代码Java

2009-10-22 08:48:59

Windows 7播放器推荐

2011-02-23 15:49:49

2019-07-17 09:29:09

Python自动化接口

2021-05-20 10:37:55

iOS苹果系统

2011-12-15 09:55:47

javanio
点赞
收藏

51CTO技术栈公众号