浅谈JDK7和JDK8的区别在哪

目录一、接口中的default方法二、lambda表达式三、函数式接口四、StreamAPI五、移出永久代,元空间替换六、HashMap中的优化七、currentHashMap的优化

一、接口中的default方法

一般来说接口中的方法都是不实现的,基本通过实现类来实现方法。但是jdk8中提供了一种被default修饰的方法,可以直接在接口中进行实现。

二、lambda表达式

jdk8引入了lambda表达式,也可称为closure(闭包),通常是在需要一个函数,但又不想费神去命名一个函数的场合下使用,也就是指匿名函数。lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。

由于其几乎被所有主流开发语言支持。是java8新引入的一种语法,是一种紧凑的传递代码的方式。使用lambda表达式可以使代码变的更加简洁紧凑。

三、函数式接口

函数式接口的引入是为了函数式编程的,函数式编程往往依赖于lambda表达式。

定义函数式接口有两个步骤:

1)确保接口中有且仅有一个抽象方法:2)使用注解@FunctionalInterface修饰接口

四、StreamAPI

JDK8中引入了StreamAPI,对于学过Flink或Spark的学者应该对此比较熟悉,其实就是类似于一种流式的数据处理,从dataSource到中间的operator操作,再到最后的dataSink。

Stream的中间操作有map,filter等操作。而流式的数据处理往往就是通过函数式编程实现的。

五、移出永久代,元空间替换

JDK7使用永久代存储类的元数据,JDK8使用元空间存储类的元数据。元空间和永久代都是用来存储class相关信息,包括class对象的Method,Field等,元空间和永久代其实都是方法区的实现,只是实现有所不同,所以说方法区其实只是一种JVM的规范。

区别:

两者最大的区别是元空间使用本地内存,而永久代使用的是JVM的内存。

元空间优势:

优势就是元数据分配只受本地内存大小的限制。本地内存剩余多少理论上metaspace就可以有多大,这解决了空间不足的问题,不过也不可能任其无限壮大,JVM默认在运行时会根据需要动态的设置其大小

六、HashMap中的优化

1)增加红黑树

2)解决jdk1.7多线程下的死循环:

扩容使用尾插法,抛弃头插法

3)rehash的优化:

jdk7扩容的rehash是重新计算桶的位置,而jdk8则进行了优化,不需要进行重新计算。

七、currentHashMap的优化

jdk7是使用分段锁实现线程安全,jdk则使用sy关键字和大量的CAS操作实现。

到此这篇关于浅谈JDK7和JDK8的区别在哪的文章就介绍到这了,更多相关JDK7和JDK8的区别内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

为了一些琐事吵架,然后冷战,疯狂思念对方,最后和好。

浅谈JDK7和JDK8的区别在哪

相关文章:

你感兴趣的文章:

标签云: