浅谈JDK7和JDK8的区别在哪
jdk怎么使用⽬录
⼀、接⼝中的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的区别内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论