如果说今年Java开发平台有什么大事儿,那就要数将于年底发布的Java 7了。Java 7已经完成的七大新功能,包括新增的垃圾回收器G1、JVM动态语言支持以及模块化等等。进入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增加新特性的原因。那么,现在我们最好去看一些代码实例。
Java 7新特性的代码实例
下面列出的大多数例子都是来源于Joe Wright博客中(Java7中的新语言特性)的高水平文章。
集合的语言支持
在这里我们主要讲的是,当创建一个List、Set或者Map的时候,你怎样尽量少写代码。你不必先实例化Object,然后再给Collection添加元素。你现在只需1行代码就可以完成。
以下是引用片段: List list = [“item”]; String item = list[0]; Set set = {“item”}; Map map = {“key” : 1}; int value = map[“key”]; |
自动资源管理
由于try / catch语句的原因,冗长的代码令人非常头痛。你或许会喜欢这个全新的特性。
实际上,下面这些代码:
以下是引用片段: BufferedReader br = new BufferedReader(new FileReader(path)); try { return br.readLine(); } finally { br.close(); } |
变成了如下这种形式:
以下是引用片段: try (BufferedReader br = new BufferedReader(new FileReader(path)) { return br.readLine(); } |
通用实例创建来改进类型推断(diamond)
当你把对象的接口申明指定成范型后,你在对象实例化时不得不再指定一次。现在,你不必如此了,因为你可以这样:
Map> map = new HashMap<>(); 数值文字的加强
我不敢肯定这个对大多数人都有用。你可以这样做:
以下是引用片段: int billion = 1_000_000_000; |
允许在switch中使用字符串
这个无需解释,其意思很明确。
以下是引用片段: String availability = “available”; switch(availability) { case “available”: //code break; case “unavailable”: //code break; case “merged”: //code default: //code break; } |
二进制文字
你可以使用前缀0b创建二进制文字
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,因为它的时间太久远了。
结果如下所示:
显然,不同版本之间的性能差异并不是特别大。
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月发布。让我们等待吧。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
翻译
相关推荐
-
内存数据网格提供商一头扎进Java
10年的时间里,应用性能解决方案提供商Alachisoft一直在用NCache(针对N-Tier和网格计算.NET应用的内存计算和数据网格产品)为.NET社区服务。
-
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高, 直到把内存吃完应用崩溃,但是这个wrapper
遇到这样一个问题:通过java service wrapper部署应用,wrapper进程占用的内存会一直升高 […]
-
Google App Engine for Java 对于目前中国需要学习吗?
-
前无古人后无来者的Java平台
开发人员一直在致力于保持Java的活力,经过20年后,我们感觉从来没有更好的、更令人激动的时刻如同Java社区一样。