JDK7新特性

来源:互联网 发布:linux中重启oracle 编辑:程序博客网 时间:2024/05/19 17:26

 1.支持动态类型语言invokedynamic

Java 平台上的脚本语言,通过一个脚本语言引擎在 JVM 上执行 JavaScript 等脚本语言。但由于 JVM 本身的设计原来是针对 Java 这种静态类型语言的,所以脚本语言无论是解释执行,或者是编译时用虚拟类型,还是运用反射机制,都会对执行效率产生很大程度的影响。

增加了一个 InvokeDynamic 的字节码指令来支持动态类型语言,使得在把源代码编译成字节码时并不需要确定方法的签名,即方法参数的类型和返回类型。当运行时执行 InvokeDynamic 指令时,JVM 会通过新的动态链接机制 Method Handles,寻找到真实的方法。

有了 InvokeDynamic,动态类型语言在 JVM 上的执行速度得到了大大提升。

  2.G1垃圾回收器

G1 垃圾回收器是一个服务器端的垃圾回收器,针对大内存多核 CPU 的环境,目的在于减少 Full GC 带来的暂停次数,增加吞吐量。从长远来看,G1 会代替 Concurrent Mark-Sweep Collector(CMS)。实现上,G1 在堆上分配一系列相同大小的连续区域,然后在回收时先扫描所有的区域,按照每块区域内存活对象的大小进行排序,优先处理存活对象小的区域,即垃圾对象最多的区域,这也是 Garbage First 这个名称的由来。G1 把要收集的区域内的存活对象合并并且复制到其他区域,从而避免了 CMS 遇到的内存碎片问题。此外,G1 采用了一个可预测暂停时间模型来达到软实时的要求。

  3.小的语言改进

其中包括了支持 String 的 switch 语句,在 try 之后自动关闭资源(try-with-resources),更简洁的泛型,数字可以用下划线分割和多重 catch 的改进等等。

 4.核心类库新增API

为了防止自定义多线程 ClassLoad 产生的死锁问题,java.lang.ClassLoader 类增加了以下 API。

 protected Object getClassLoadingLock(String className) 

 protected static boolean registerAsParallelCapable()

 

I/O 与网络

Java 平台的更多新 NIO 2 的 API(JSR 203)

NIO2 主要包括了 3 个方面的改进:

  1. 新的文件系统 API 支持大量文件属性的访问、文件系统监控服务、平台相关的 API,如 DosFileAttributes 和 PosixFileAttributes 等,以及一个可插拔文件系统的 SPI。
  2. Socket 和文件的异步 IO。
  3. Socket channel 的功能完善,支持 binding、多播等。

支持 zip/jar 的 FileSystemProvider 实现

NIO2 提供了新的 service provider java.nio.file.spi.FileSystemProvider 来实现一个文件系统,并在 demo 中提供了一个 zip/jar 的文件系统示例。

SCTP(Stream Control Transmission Protocol)

实现了 SCTP 协议,即流控制传输协议,由 RFC 2960 规范。它是一种类似于 TCP 的可靠传输协议。SCTP 在两个端点之间提供稳定、有序的数据传递服务(非常类似于 TCP),并且可以保护数据消息边界(例如 UDP)。然而,与 TCP 和 UDP 不同,SCTP 是通过多宿主(Multi-homing)和多流(Multi-streaming)功能提供这些收益的,这两种功能均可提高可用性 。

SDP(Socket Direct Protocol)

SDP,套接字定向协议,提供了高吞吐量低延迟的高性能网络连接。它的设计目标是为了使得应用程序能够透明地利用 RDMA(Remote Direct Memory Access) 通信机制来加速传统的 TCP/IP 网络通信。最初 SDP 由 Infiniband 行业协会的软件工作组所指定,主要针对 Infiniband 架构,后来 SDP 发展成为利用 RDMA 特性进行传输的重要协议。JDK7 这次实现 Solaris 和 Linux 平台上的 SDP。

使用 Windows Vista 上的 IPv6 栈

更新了网络方面的代码,在 Windows Vista 上,当 IPv6 栈可用时,优先使用 IPv6 栈。




0 0
原创粉丝点击