浅谈JDK7和JDK8的区别在哪

 更新时间:2021年06月03日 09:30:28   作者:我是方小磊  
面试总是遇到这个问题,做一个小总结,文中有非常详细的介绍,对正在学习java的小伙伴们很有帮助,需要的朋友可以参考下

一、接口中的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的区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot中thymeleaf模板使用详解

    springboot中thymeleaf模板使用详解

    这篇文章将更加全面详细的介绍thymeleaf的使用。thymeleaf 是新一代的模板引擎,在spring4.0中推荐使用thymeleaf来做前端模版引擎。
    2017-05-05
  • 简单讲解Java设计模式编程中的单一职责原则

    简单讲解Java设计模式编程中的单一职责原则

    这篇文章主要介绍了Java设计模式编程中的单一职责原则,这在团队开发编写接口时经常使用这样的约定,需要的朋友可以参考下
    2016-02-02
  • Java实现解析dcm医学影像文件并提取文件信息的方法示例

    Java实现解析dcm医学影像文件并提取文件信息的方法示例

    这篇文章主要介绍了Java实现解析dcm医学影像文件并提取文件信息的方法,结合实例形式分析了java基于第三方库文件针对dcm医学影像文件的解析操作相关实现技巧,需要的朋友可以参考下
    2018-04-04
  • Springboot+Flowable 快速实现工作流的开发流程

    Springboot+Flowable 快速实现工作流的开发流程

    这篇文章主要介绍了Springboot+Flowable 快速实现工作流的开发流程,本文通过实例代码图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-02-02
  • Java中Double除保留后小数位的几种方法(小结)

    Java中Double除保留后小数位的几种方法(小结)

    这篇文章主要介绍了Java中Double保留后小数位的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • idea中maven本地仓库jar包打包失败和无法引用的问题解决

    idea中maven本地仓库jar包打包失败和无法引用的问题解决

    本文主要介绍了idea中maven本地仓库jar包打包失败和无法引用的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • MyBatis核心配置文件深入分析

    MyBatis核心配置文件深入分析

    这篇文章主要介绍了MyBatis核心配置文件,MyBatis的前身就是iBatis,iBatis本是由Clinton Begin开发,后来捐给Apache基金会,成立了iBatis开源项目。2010年5月该项目由Apahce基金会迁移到了Google Code,并且改名为MyBatis
    2022-12-12
  • java实现递归文件列表的方法

    java实现递归文件列表的方法

    这篇文章主要介绍了java实现递归文件列表的方法,实例分析了java采用递归算法遍历文件的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • Java中字符串替换的几种常用方法总结

    Java中字符串替换的几种常用方法总结

    这篇文章主要介绍了Java中字符串替换的几种常用方法,包括String类的replace、replaceAll和replaceFirst方法,使用StringBuilder或StringBuffer类,自定义替换方法,以及使用第三方库如Apache Commons Lang,需要的朋友可以参考下
    2025-04-04
  • Flowable流程引擎API与服务

    Flowable流程引擎API与服务

    这篇文章主要介绍了Flowable流程引擎API与服务,引擎API是与Flowable交互的最常用手段,总入口点是ProcessEngine,使用ProcessEngine,可以获得各种提供工作流或BPM方法的服务,下面我们来详细了解
    2023-10-10

最新评论