AirJD 焦点
AirJD

没有录音文件
00:00/00:00
加收藏

Java SE 8 中的 55 个新特性

发布者 javalover
发布于 1430382648832  浏览 8067 关键词 Java 
分享到

第1页

第2页

Java SE 8 中的 55 个新特性(计划 B 的第 2 部分)
Simon Ritter
Java 技术宣讲师

Twitter:@speakjava

第3页

以下内容旨在概述产品的总体发展方向。该内容仅供参考,不可纳入任何合同。其内容不构成提供任何材料、代码或功能的承诺,并且不应该作为制定购买决策的依据。
此处所述有关 Oracle 产品的任何特性或功能的开发、发布以及相应的日程安排均由 Oracle 自行决定。

第4页

重要免责声明

Java SE 8 规范不是最终的
某些特性如有更改,恕不另行通知 
某些特性尚未实现

第5页

Java SE 8 (JSR 337)
新功能
JSR 308:类型的批注
JSR 310:日期和时间 API
JSR 335:Lambda 表达式
更新的功能
JSR 114:JDBC 行集
JSR 160:JMX 远程 API
JSR 199:Java 编译器 API
JSR 173:XML 的流 API
JSR 206:Java API for XML Processing
JSR 221:JDBC 4.0
JSR 269:可插拔的批注处理 API
组件 JSR

第6页

JDK 增强建议 (JEP)
定期更新的建议清单
充当 JDK 发行项目的长期路线图
路线图至少维持 3 年
增强建议的统一格式和集中存档
相关方可查找、读取、评论并提出建议
流程面向每个 OpenJDK Committer 开放
增强是对 JDK 代码库的重要修改
两周或数周的工程投入
对 JDK 或开发流程和基础架构的重大更改
对开发人员或客户的要求更高

第7页

语言

第8页

Lambda 表达式
Lambda 表达式向 Java 提供匿名函数类型
替换单一抽象方法类型的使用
闭包和功能编程
public interface DoStuff {
  boolean isGood(int x);
}

void doSomething(DoStuff d) {
  if (d.isGood(myVariable))
    ...
}

doSomething(answer -> answer == 42);
JEP126

第9页

扩展方法
提供相应机制将新方法添加到现有接口
未破环向后兼容性
为 Java 提供行为及类型(而不是状态!)的多继承
将(功能)的多个继承带到 Java
public interface Set extends Collection {
   public int size();

   ...   // The rest of the existing Set methods

   public T reduce(Reducer r)
     default Collections.setReducer;
}
JEP126

第10页

针对 Java 类型的批注
批注当前只能用在类型声明上
类、方法、变量定义
所有类型放置位置的扩展
例如,参数
允许通过可插入的类型检查器进行错误检测
例如,空指针错误、争用条件等
public void process(@notnull List data) {…}
JEP104

第11页

归纳式目标类型推断
基本数据类型的可用性得到改进
class List {
   static  List nil() { ... };
   static  List cons(Z head, List tail) { ... };
   E head() { ... }
}
List ls = List.nil();  // Inferred correctly
List.cons(42, List.nil()); 
错误:预期List,发现List
JEP101
Add inferrence in argument position and chained calls.
List.cons is a static method, but the type cannot currently be inferred from the fact that the first parameter is an int that would be autoboxed to an Integer

第12页

在运行时访问参数名称
用于检索方法和构造函数的参数名称的机制
 在运行时通过核反射实现
改进的代码可读性
消除冗余批注
改进 IDE 功能
自动生成模板代码
JEP118
Currently parameter names of methods and constructors cannot be retrieved via reflection
Parameter types can be retrieved, but not names (Look at Method and Constructor classes in java.lang.reflect)

第13页

小改进
重复批注
具有同一类型的多个批注应用到单个程序元素
不再有 apt 工具和关联 API
完成到 JSR 269 实施的过渡
DocTree API
提供对 javadoc 注释语义元素的访问
DocLint 工具
使用 DocTree API 识别 javadoc 注释中的基本错误
javax.tools
从 API 以及命令行/执行调用 javadoc 工具
JEPS 120, 117, 105, 172, 106
JSR 269 Pluggable Annotation Processing API

第14页

核心库

第15页

使用 Lambdas 增强核心库
无小任务!
Java SE 7 具有 4024 个标准类
实现现代化的通用库 API
提升性能
使用 invokedynamic 获得实现 Lambdas 的优势
演示扩展方法最佳实践
JEP 109

第16页

并发更新
可伸缩的更新变量
DoubleAccumulator、DoubleAdder 等
多个变量避免更新争用
适用于频繁更新、不频繁读取
ConcurrentHashMap 更新
改进的扫描支持、键值(key)计算
ForkJoinPool 改进
为 IO 绑定应用程序提供的基于完成的设计
被阻止的线程将工作交给正在运行的线程
JEP 155
Completion based design.  Multiple threads getting stalled by one thread.  The way round this is to basically pass on the work from a thread that is waiting to the one doing the work.  The waiting thread is then free to be reused.

第17页

对集合执行批量数据操作
添加 .Net 功能
LINQ 样式处理
串行和并行实现
一般用 Lambda 语句表达
并行实现构建于 Fork-Join 框架之上
Java 的筛选、映射、化简
JEP 107
Heavily linked to the ideas of JSR-335, Lanbdas and extension methods.  Stream implementation for lazy, or parallel implementation

第18页

并行阵列排序
java.util.Arrays
parallelSort(不同基元的不同签名)
顺序排序预期最低改进 30% 
适用于具有适当数据集大小的双核系统
构建于 fork-join 框架之上
使用 Doug Lea 的 ParallelArray 实现
要求工作区与排序阵列的大小相同
JEP103

第19页

日期和时间 API
适用于 Java SE 平台的新日期、时间和日历 API
支持标准时间概念
部分、持续时间、期间、间隔
日期、时间、瞬间和时区
提供有限的日历系统集,并且可延伸到其他集
使用相关标准,包括 ISO-8601、CLDR 和 BCP47
基于明确时间刻度,与 UTC 有关
JEP150
Internal storage using just the offset in nanosecods from the Epoch.  Things like day and date, etc calculated on demand to improve efficiency.
Partial, e.g. March 20th (no year).  Not specific
Duration (nanos), period (minutes, days, etc), interval nanos between two points in time.

第20页

JDBC 4.2
添加 setter/更新方法
ResultSet、PreparedStatement 和 CallableStatement
支持新数据类型,如 JSR 310 中定义的类型
REF_CURSOR 支持 CallableStatement
DatabaseMetaData.getIndexInfo 
CARDINALITY 和 PAGES 的新列,返回长值
新 DatabaseMetaData 方法
getMaxLogicalLobSize
为 LOB 返回逻辑最大大小
可用性和可移植性得到些许增强
JEP170 / JSR-310 Date and Time API
REF_CURSOR for RecordSets from stored procedures

第21页

Base64 编解码
开发人员当前被迫使用非公共 API
sun.misc.BASE64Encoder
sun.misc.BASE64Decoder
Java SE 8 现在有了标准方法
java.util.Base64.Encoder
java.util.Base64.Decoder
encode、encodeToString、decode、wrap 方法
JEP135

第22页

小改进
javax.lang.model 实现
统一批注 API 以查看编译时和运行时反射信息
字符集实现改进
字符集规模减小、编解码性能改进
降低了核心库内存使用
对象大小减小、禁用反射编译器、内部表大小等
JEP 119, 112, 149
javax.lang.model used for annotation processing.  Currently limited to compile time, but this would make it available at runtime

第23页

小改进
优化 java.text.DecimalFormat.format
性能是原来的 100.0 或 1000.0 倍(仅限 2 或 3 DP)
静态链接 JNI 库
嵌入式应用程序所需
目前仅支持动态链接
用平衡树处理频繁HashMap 冲突
散列区段在特定阈值从链接列表切换到平衡树
JEP 177, 178, 180

第24页

国际化
(I18N)

第25页

区域设置数据打包
生成区域设置数据文件的工具
从 LDML 格式
Unicode 通用区域设置数据信息库 (CLDR) 支持
从底层平台支持区域设置元素
JEP127
Locale Data Markup Language

第26页

BCP 47 区域设置映射
指示用于信息对象的语言的语言标记
RFC-5646(语言范围)
RFC-5456(语言优先级、首选项)
语言范围 Collection
语言优先级 List 
向 Locale 类添加三个操作
filterBasic
filterExtended
lookup
JEP128
BCP – Best Current Practice

第27页

Unicode 6.2
Java SE 7 支持 Unicode 6.0
Unicode 6.1 中的变更(2012 年 2 月)
添加 11 个新块到 java.lang.Character.UnicodeBlock
添加 7 个新脚本到 java.lang.Character.UnicodeScript
java.lang.Character、String 和其他类中支持 700 多种新字符
Unicode 6.2 中的变更(2012 年 9 月)
支持新土耳其货币符号 (U+20BA)
JEP133

第28页

安全性

第29页

可配置的安全随机数生成器
更好实现 SecureRandom
当前,应用程序可在 Linux 上挂起
JVM 使用 /dev/random
如果系统熵池不是足够大,该功能将被阻止
这项工作尚在进行中
JEP123

第30页

增强的证书吊销-检查 API
当前 java.security.cert API 要么是全部,要么什么都不是
未能连接服务器是致命错误(Fate error)
新类
RevocationChecker
RevocationParameters
JEP124
RevocationChecker can evaluate the status of a certificate revocation based on a RevocationParmaters object that encapsulates the revocation requestproperties

第31页

HTTP URL 权限
新的网络权限类型
按 URL 而非 IP 地址授予访问权限
当前指定网络权限的方法
java.net.SocketPermission
不仅仅局限于 HTTP
仅按 IP 地址操作
更高级的新功能
支持 HTTP 操作(POST、GET 等)
基于受限的 doPrivilege 特性构建
JEP 184

第32页

小事项
受限的 doPrivilege
用启用的权限执行 Lambda 表达式
NSA Suite B 加密算法 
符合标准,可满足美国政府和银行的要求
AEAD CipherSuite 支持
符合标准,可满足美国政府和银行的要求
 SHA-224 消息摘要
由于 SHA-1 中的已知缺陷而必需
利用 CPU 指令实现 AES 加密
改进加密/解密性能
doPrivileged, allows a Lambda expression (i.e. a functional interface) to have it’s method executed 
Authenticated Encryption with Associated Data (AEAD)
secure hash algorithm SHA
Advanced encryption standard (AES)

JEP 140, 129, 115, 130, 164

第33页

小更改
Microsoft Services For UNIX (MS-SFU) Kerberos 5 扩展
增强的 Microsoft 互操作性
TLS Server Name Indication (SNI) 扩展
更灵活的安全虚拟托管、虚拟机基础架构
适用于 64 位 Windows 的 PKCS#11 加密提供程序
允许使用广泛可用的本地库
基于口令加密的更强大算法
研究人员和黑客均继续发展
革新 JKS-JCEKS-PKCS12 密钥存储
为加密应用程序简化与 Java SE 密钥存储的交互
PKCS – Public Key Cryptography Standard from RSA Labs (Hardware devices and smart cards)
JKS-JCEKS-PKCS12 
Java Key Store (from SUN days in the JDK)
Java Cryptography Extensions Key Store

JEP 113, 114, 131, 121, 166

第34页

平台

第35页

启动 JavaFX 应用程序
支持直接启动 JavaFX 应用程序
java 命令行启动器增强
JEP 153

第36页

紧凑型配置文件
大致的静态空间占用目标
Compact1 配置文件
Compact2 配置文件
Compact3 配置文件
完整 JRE
140Mb
‎24Mb
17Mb
10Mb
JEP 161

第37页

模块化准备
修正对类加载器的某些假设
使用 ServiceLoader 而非专有的 SPI 代码
用来分析应用程序代码相关性的 JDK 工具
弃用会妨碍模块化的 API
例如,java.util.logging.LogManager.addPropertyChangeListener
审核并有可能更改 $JAVA_HOME 规范性引用
相对与绝对路径名称
为 Jigsaw 作好准备
JEP 162
ServiceLoader.  JAXP does not use ServiceLoader (which provides a consistenet interface to an SPI)

第38页

精简实现
随附 JRE 的应用程序不必包含所有类库
这不会破坏“编写一次,随处运行”
只适用于绑定的 JRE
其他应用程序无法使用 JRE

第39页

虚拟机

第40页

适用于方法句柄的 Lambda 形式的表示
改善方法句柄和 invokedynamic 的性能、质量和可移植性
减少 JVM 中汇编代码的数量
减少方法句柄处理期间的本地调用
更好的 JSR 292 参考实现 (invokedynamic)
Java 中重写的汇编语言代码
JEP 160
Move code from assembly language to Java for implementing method handles.

第41页

Nashorn JavaScript 引擎
高性能的轻型 JavaScript 引擎
集成到 JRE
使用现有 javax.script API
符合 ECMAScript-262 5.1 版语言规范
新命令行工具 jjs 可运行 JavaScript
国际化的错误消息和文档
JEP 174

第42页

停用很少使用的 GC 组合
很少使用
DefNew + CMS
ParNew + SerialOld
增量 CMS
大量测试尝试,返回数量少
将生成弃用选项消息
尚不会消失

JEP 173

第43页

消除持久代
不再需要调整其大小
当前对象移到 Java 堆或本地内存
Interned 字符串
类元数据
类静态变量
部分 HotSpot、JRockit 整合
永久
JEP 122

第44页

内在防御
sun.misc.Unsafe 类中的三个新方法
loadFence
storeFence
ringFence
库代码所需 
确保内存访问操作不重新排序
设计意图不是给应用程序开发人员使用
以后可能以 API 形式公开
loadFence prevent reordering of load operations before this call with loads and stores after this call
storeFence prevent reordering of store operations before this call with loads and stores after this call
ringFence prevent reordering of all memory operations before this call with loads and stores after this call
JEP 171

第45页

调用程序敏感方法的机械检查
提高 JDK 方法句柄实现的安全性
新的 @CallerSensitive 批注
SecurityManager.checkMemberAccess 已弃用
未来,可能抛出无条件异常
java.util.logging.Logger 已修改
 删除资源包搜索中的堆栈审核
与模块化准备相关
JEP 176

第46页

小改进
增强的验证错误
字节代码验证错误上的附加上下文信息
减少指定字段的缓存争用
可避免共享缓存行的平台变量
减少类元数据空间占用
使用 Java ME CDC 的 CVM 所提供的技术 
小型 VM 
libjvm.so <3MB

JEP 136, 142, 147, 148

第47页

JDK
基于自动配置的构建系统
./configure 样式构建设置
增强 javac 以提高构建速度
在所有可用内核上运行
跟踪版本之间的包相关性和类相关性
为原生方法自动生成头文件
清除不再需要的类和头文件
提高构建速度、简化安装
JEP 138, 139

第48页

总结
Java SE 8 将添加大量新特性(并删除某些特性)
语言

JVM
Java 在不断发展!
jdk8.java.net
www.jcp.org
openjdk.java.net/jeps

第49页

总结
Java SE 8 将添加大量新特性(并删除某些特性)
语言

JVM
Java 在不断发展!
jdk8.java.net
www.jcp.org
openjdk.java.net/jeps

第50页



支持文件格式:*.pdf
上传最后阶段需要进行在线转换,可能需要1~2分钟,请耐心等待。