1.Java8让编程起来更容易
- 提供了更多的编程工具和概念,能以更快,更简洁,更易于维护的方式解决问题,比如:
Collections.sort(inventory, new Comparator<Apple>(){
public int compare(Apple a1, Apple a2){
return a1.getWeight().compareTo(a2.getWeight());
}
})
- Java8可以写更简洁
inventory.sort(comparing(Apple::getWeight));
2.适应多核计算机结构
- 越来越多需要处理大数据,需要利用多核计算机或计算集群来有效处理,而通过多线程代码来利用并行(Thread API)并非易事。
- Java8提供了新的API(称为 “流” ,Stream<T>),支持许多处理数据的并行操作。
-
流思想,例如:
Linux中的管道:cat file1 file2 | tr "[A-Z]" "[a-z]" | sort | tail -3
3.编程语言不断在更新换代
- 编程语言数以千计,像生态系统一样,新的语言会出现,旧语言则被取代,除非能不断演变改进,跟上节奏。COBOL,DELPHI等一些语言被淘汰。
- java8提供了强大的新语汇和新设计模式,引入函数式编程,让我们可以向函数式编程领域转变,在大面上考虑做什么,而不是如何实现。
4.其他好思想
- 使用描述性数据类型来避免null
Optional<T>:可以包含,也可以不包含一个值,有方法明确处理值不存在的情况。 - 模式匹配
可以看作switch的扩展形式
5.JVM优化
- JDK8中把存放元数据中的永久区删除,新增元数据区,直接从内存从本地内存分配空间,这样永久内存就不再占用堆内存,它可以通过自动增长来避免JDK7以及前期版本中常见的永久内存错误(java.lang.OutOfMemoryError: PermGen)。
JDK8也提供了一个新的设置Matespace内存大小的参数
-XX:MaxMetaspaceSize=128m
如果不设置JVM将会根据一定的策略自动增加本地元内存空间。如果你设置的元内存空间过小,你的应用程序可能得到以下错误:
java.lang.OutOfMemoryError: Metadata space
新的垃圾收集器:G1
1.将垃圾回收化整为零,减少对用户服务的影响
2.垃圾回收时间可配置
3.避免内存碎片移除一些很少使用的垃圾回收器组合
提供更多的验证错误信息
减少指定字段上的缓存争用