JDK8--01:JDK8简介


一、新特性
1、lambda表达式(重点)
2、函数式接口
3、方法引用与构造器引用
4、Stream API(重点)
5、接口中的默认方法和静态方法
6、新时间日期API
7、其他新特性


二、特点:
1、速度更快(底层数据结构调整、垃圾回收机制做了调整、内存结构做了调整、并行处理)
(1)数据结构调整
hashMap(所有以hashMap实现的对象,例如hashSet,concurrentHashMap)
jkd7:数组+链表结构,hash冲突时添加在链表头部
jdk8:数组+链表(红黑树,当冲突大于8时,链表改为红黑树,除了添加操作,红黑树都比链表快),hash冲突时添加在链表/红黑树尾部
concurrentHashMap
jkd7:使用分段锁(Segment,默认分16段)
jdk8:使用CAS算法(提高效率),同时hash也改为新的hashMap实现方式
(2)内存结构调整
jdk7:jvn内存模型分为栈、堆、方法区,其中方法区属于堆中的永久区,中存在永久去和方法区
jdk8:删除永久区和方法区,新增元空间(MetaSpace),最大的特点:元空间直接使用物理内存作为存储对象
此处插入一下为什么要废弃永久代
1)现实使用中易出问题。
由于永久代内存经常不够用或发生内存泄露,爆出异常 java.lang.OutOfMemoryError: PermGen,使用元数据区,直接使用物理内存,基本上很难出现此错误。
字符串存在永久代中,容易出现性能问题和内存溢出。
类及方法的信息等比较难确定其大小,因此对于永久代的大小指定比较困难,太小容易出现永久代溢出,太大则容易导致老年代溢出。
2)永久代会为 GC 带来不必要的复杂度,并且回收效率偏低。
3)合并多种jvm版本
我们使用的是sun公司的jvm(目前被Oracle收购):Oracle-Sun HotSpot
Oracle公司自己的jvm:JRocket
IBM公司的jvm:J9 JVM
国产jvm(阿里):Taobao JVM
除了sun公司的jvm外,其余的jvm早就没有了永久区和方法区,Oracle可能会将HotSpot与JRockit合二为一,因此将内存结构改为一致。
2、代码更少(lambda表达式)
3、强大的Stream API
4、便于并行
5、最大化减少空指针异常(optional)
原文地址:https://www.cnblogs.com/liconglong/p/12182244.html