JDK7和JDK8的区别
文章目录
- 1. 接口中的default方法
- 2. lambda表达式
- 3. 函数式接口
- 4. StreamAPI
- 5. 移出永久代,元空间替换
- 6. HashMap中的优化
- 7. currentHashMap的优化
面试总是遇到这个问题,做一个小总结,可能总结的不全
1. 接口中的default方法
一般来说接口中的方法都是不实现的,基本通过实现类来实现方法。但是jdk8中提供了一种被default修饰的方法,可以直接在接口中进行实现。
2. lambda表达式
jdk8引入了lambda表达式,也可称为closure(闭包),通常是在需要一个函数,但又不想费神去命名一个函数的场合下使用,也就是指匿名函数。
lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
由于其几乎被所有主流开发语言支持。是java8新引入的一种语法,是一种紧凑的传递代码的方式。使用lambda表达式可以使代码变的更加简洁紧凑。
3. 函数式接口
函数式接口的引入是为了函数式编程的,函数式编程往往依赖于lambda表达式。
定义函数式接口有两个步骤:
1)确保接口中有且仅有一个抽象方法:
2)使用注解@FunctionalInterface修饰接口
4. StreamAPI
JDK8中引入了StreamAPI,对于学过Flink或Spark的学者应该对此比较熟悉,其实就是类似于一种流式的数据处理,从dataSource到中间的operator操作,再到最后的dataSink。
Stream的中间操作有map,filter等操作。而流式的数据处理往往就是通过函数式编程实现的。
5. 移出永久代,元空间替换
JDK7使用永久代存储类的元数据,JDK8使用元空间存储类的元数据。元空间和永久代都是用来存储class相关信息,包括class对象的Method,Field等,元空间和永久代其实都是方法区的实现,只是实现有所不同,所以说方法区其实只是一种JVM的规范。
区别:
两者最大的区别是元空间使用本地内存,而永久代使用的是JVM的内存。
元空间优势:
优势就是元数据分配只受本地内存大小的限制。本地内存剩余多少理论上metaspace就可以有多大,这解决了空间不足的问题,不过也不可能任其无限壮大,JVM默认在运行时会根据需要动态的设置其大小
6. HashMap中的优化
1)增加红黑树
2)解决jdk1.7多线程下的死循环:
扩容使用尾插法,抛弃头插法
3)rehash的优化:
jdk7扩容的rehash是重新计算桶的位置,而jdk8则进行了优化,不需要进行重新计算。
7. currentHashMap的优化
jdk7是使用分段锁实现线程安全,jdk则使用sy关键字和大量的CAS操作实现。
JDK7和JDK8的区别相关推荐
- ConcurrentHashMap原理,jdk7和jdk8的区别
- Java之HashMap系列--JDK7与JDK8的HashMap的区别
原文网址:Java之HashMap系列--JDK7与JDK8的HashMap的区别_IT利刃出鞘的博客-CSDN博客 简介 本文介绍JDK7与JDK8的HashMap的区别. JDK7与JDK8的Ha ...
- JDK7与JDK8中HashMap的实现
JDK7中的HashMap HashMap底层维护一个数组,数组中的每一项都是一个Entry 1 transient Entry<K,V>[] table; 我们向 HashMap 中所放 ...
- Java集合:JDK7与JDK8中HashMap的实现
JDK7中的HashMap HashMap底层维护一个数组,数组中的每一项都是一个Entry transient Entry<K,V>[] table; 我们向 HashMap 中所放置的 ...
- 第1篇--基于jdk7和jdk8分析 JVM的内存区域
基于jdk7和jdk8分析 JVM的内存区域 目录 前言 1.什么是JVM 2.JRE/JDK/JVM是什么关系 3.JVM执行程序的过程 4. JVM的生命周期 5.JVM垃圾回收 一.运行时数据 ...
- java 8代码 改 java7_Window安装JDK7和JDK8,并一键切换
脚本代码:(保存成.bat文件直接运行就可以了.)代码如下: @echo off title 修改JDK mode con cols=35 lines=20 color 3f cd /d " ...
- java jdk7,jdk8连接oracle19C数据库ojdbc驱动
之前程序是连接的oracle11G数据库,由于11G官方不再维护,很多客户升级到了oracle19C, 导致程序连接报错 我这边jdk为1.8 oracle jdbc驱动为 <dependenc ...
- 微信企业号接入JDK6和JDK7及JDK8加解密失败处理(Java)
微信企业号接入JDK6和JDK7及JDK8加解密失败处理(Java) 使用文章 http://blog.csdn.net/omsvip/article/details/39926493 提供的接入代码 ...
- windows同时安装jdk7和jdk8
有时候某个插件只支持jdk7,而电脑又安装的是jdk8,这时需要卸载jdk8再装jdk7,当想用jdk8时又得切换回去.能不能同时安装jdk7和jdk8呢?当然可以,步骤如下: 1.下载并安装jdk7 ...
- 关于Jdk7与Jdk8对Collections进行分组的区别
先准备一点数据: public class User { private Integer id; private String type; private String nam ...
最新文章
- 7个值得推荐的优质软件,让人忍不住体验!
- 【效率工具】Linux服务器终端MobaXterm
- DPM 2010(三)---Exchange2010单邮箱恢复
- ORB-SLAM(四)追踪
- 使用C#把Tensorflow训练的.pb文件用在生产环境
- linux新建用户不显示,linux系统无法添加用户帐号的原因分析
- eggjs增删改查MySQL,nodejs操作mysql实现增删改查
- Spring Boot数据持久化之NamedParameterJdbcTemplate
- 变成“砖”?旧款 Kindle 因 3G 消失将无法联网
- 亲测源码多多进鱼带VUE源码任务悬赏源码活动营销三级分销返佣积分商城版
- SBB:替代固氮酶对非共生固氮可能的贡献
- 资源共享——FTP服务
- 笔记:python基础之内置函数2
- DMA+PWM驱动彩色RGB灯
- 智能问答(Question Answering)的主要研究方向
- 假设有一个字类型的数值arry1,试编写程序统计arry1数值及其后若干数值,在字单元中存储时每个数据中含“1”数据位的个数,并将统计结果保存在res1数组中。数据段的代码定义如下: data seg
- 用 Python 实现手机自动答题,这下百万答题游戏谁也玩不过我!
- 解决jupyter notebook无法跳转浏览器
- hexo+yilia主题添加评论
- 生命不息,折腾不止—小黑升win10
热门文章
- ssm图书馆管理系统
- 14、Date and Time (日期和时间)
- VectorDraw Web JS 9.9 Crack
- matlab云端软件,关于云端软件上安装matlab
- Android5.0系统 知识点总结(持续更新)
- 抽数,数据抽取,增量数据的抽取方式
- 计算机网络第5版答案完整版
- 笔记本 续航测试软件,续航能力横评测试
- (经典中的经典!)IT学生解惑真经(转),真会有人看完这15万字吗
- python实训总结泰坦尼克号重建_Python之泰坦尼克号生存率分析