Java 8 的改变及新特性

一、HashMap底层结构的改变

jdk1.7 HashMap : 数组+单向链表

jdk1.8 HashMap : 数组+(单向链表/红黑树)

jdk1.8中多了下图中3个参数

在hashmap中,当hash碰撞大于8(数组单个下标中链表存储大于8个数据),并且总容量大于64(整个 hashmap中总大小大于64)时,hashmap的链表结构会转变为红黑树结构进行存储

改变原因:链表结构数据量过大时查询效率会降低,而转变为红黑树后除了添意外其他效率都会大大增加

Java 8 的改变及新特性

 

二、删除永久区变为元空间

Java 8 的改变及新特性

1、PermGen(永久代)

“方法区”是JVM的规范,而“永久代”是方法区的一种实现,并且只有HotSpot才有“PermGen space”,而对于其他类型的虚拟机并没有“PermGen space”。

在JDK1.8中,HotSpot已经没有“PermGen space”这个区间了,取而代之是Metaspace(元空间)

2、Metaspace(元空间)

在JDK1.8中,永久代已经不存在,存储的类信息、编译后的代码数据等已经移动到了MetaSpace(元空间)中,元空间并没有处于堆内存上,而是直接占用的本地内存(NativeMemory)。

元空间的本质和永久代类似,都是对JVM规范中方法区的实现。

不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存(物理内存)

3、堆内存划分

JDK1.7以及其前期的JDK版本中,堆内存通常被分为三块区域:Young Generation、Old Generation、Permanent Generation for VM Matedata

Java 8 的改变及新特性

JDK1.8中把存放元数据中的永久内存从堆内存中移到了本地内存中,JDK1.8中JVM堆内存结构就变成了如下: 

Java 8 的改变及新特性

 

三、Lambda表达式