浅谈JDK7和JDK8的区别在哪

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

(0)

相关推荐

  • 解决mybatis-plus使用jdk8的LocalDateTime 查询时报错的方法

    mybatis-plus使用jdk8的LocalDateTime 查询时报错: org.springframework.dao.InvalidDataAccessApiUsageException: Error attempting to get column 'update_time' from result set.  Cause: java.sql.SQLFeatureNotSupportedException ; null; nested exception is java.sql.SQ

  • JDK8并行流及串行流区别原理详解

    由于处理器核心的增长及较低的硬件成本允许低成本的集群系统,致使如今并行编程无处不在,并行编程似乎是下一个大事件. Java 8 针对这一事实提供了新的 stream API 及简化了创建并行集合和数组的代码.让我们看一下它是怎么工作的. 假设 myList 是 List<Integer> 类型的,其中包含 500,000 个Integer值.在Java 8 之前的时代中,对这些整数求和的方法是使用 for 循环完成的. for( int i : myList){ result += i; }

  • 教你怎么在win10环境下安装jdk8

    一.下载 下载最新的JDK8:Oracle JDK8下载 下载64位版本 Java SE Development Kit 8u291 (版本根据自己选择) 二.安装 下载好后,准备安装: 双击.exe,安装jdk8. 建议使用默认目录,安装在C盘.(本教程即在默认C盘目录安装,后续环境变量可直接粘贴复制,不用二次更改)后面的添加环境变量需要根据个人的安装位置进行更改,如不在C盘请自行处理. 一路下一步,等待安装完成. 三.添加环境变量 添加环境变量.win10搜索栏搜索 环境. 新建环境变量 J

  • 使用jdk7的nio2操作文件拷贝和剪切示例

    复制代码 代码如下: package com.xyq.io.simply.core; import java.io.File;import java.io.IOException;import java.nio.file.FileVisitResult;import java.nio.file.FileVisitor;import java.nio.file.Files;import java.nio.file.Path;import java.nio.file.Paths;import jav

  • Linux系统(CentOS7安装)安装JDK8的教程详解

    JDK 的安装 系统安装就不做过多介绍,大家从网上寻找安装步骤进行安装,不过我推荐大家进行安装时选择桌面图形化格式进行安装,方便做一部分操作,同时在安装过程中选择英文模式,同时我自己在安装的过程中发现使用Oracle VM VirtualBox这个虚拟机工具比使用VM工具开发更加方便些 使用工具 系统:CentOS7_64位(推荐使用最小配置命令窗口) Jdk:jdk1.8.0_191 虚拟机:Oracle VM VirtualBox 文档编写工具:EditPlus 文件传输工具:FileZil

  • CentOS7上以rpm方式安装JDK8

    CentOS 7 安装成功后可能已经默认安装了OpenJDK的JRE,但平时进行JAVA开发时需要用完整的JDK,所以为了避免以后不必要的麻烦,在此卸载了OpenJDK的JRE,并重新安装了Oracle的JDK8 1.安装说明 系统环境:CentOS 7 安装方式:rpm 安装包:jdk-8u131-linux-x64.rpm 2.检查系统原安装版本 [hadoop@centos7-1 ~]$ java -version OpenJDK Version "1.8.0_131" Open

  • CentOS8 安装 jdk8 / java8的教程(推荐)

    前言 最开始我是想在CentOS8上使用 wget 下载,然后对它进行解压,配置环境变量,奈何搞了很长时间都没有搞好,于是放弃,使用yum直接安装. 1.安装方法 CentOS8上使用 yum 直接安装,环境变量自动配置好 2.查看是否已安装 看到下面结果,说明已经安装配置 jdk [root@localhost ~]# java -version openjdk version "1.8.0_222" OpenJDK Runtime Environment (build 1.8.0_

  • jdk7 中HashMap的知识点总结

    HashMap中的几个重要变量 默认初始容量,必须是2的n次方 static final int DEFAULT_INITIAL_CAPACITY = 16; 最大容量,当通过构造方法传入的容量比它还大时,就用这个最大容量,必须是2的n次方 static final int MAXIMUM_CAPACITY = 1 << 30; 默认负载因子 static final float DEFAULT_LOAD_FACTOR = 0.75f; 用来存储键值对,可以看到键值对都是存储在Entry中的

  • 面试官:怎么做JDK8的垃圾收集器的调优(面试常问)

    看着面试官真诚的眼神,心中暗想看起来年纪轻轻却提出如此直击灵魂的问题.擦了擦额头上汗,我稍微调整了一下紧张的情绪,对面试官说: 在JDK8中有Serial收集器.Parallel收集器.CMS收集器.G1收集器这么几种收集器,需要根据实际硬件配置和业务需求进行选择调优. 如此浅显的回答,无法让面试官达到深入的要求,肯定不能满足面试官强烈的需求,果不其然面试官又追问到:如果是桌面应用,内存占用也就100MB,应该选择哪种垃圾收集器呢?我快速的回答:Serial收集器.看着面试官期待的眼神,我又详细

  • 深度思考JDK8中日期类型该如何使用详解

    在JDK8之前,处理日期时间,我们主要使用3个类, Date . SimpleDateFormat 和 Calendar . 这3个类在使用时都或多或少的存在一些问题,比如 SimpleDateFormat 不是线程安全的, 比如 Date 和 Calendar 获取到的月份是0到11,而不是现实生活中的1到12,关于这一点,<阿里巴巴Java开发手册>中也有提及,因为很容易犯错: 不过,JDK8推出了全新的日期时间处理类解决了这些问题,比如 Instant . LocalDate . Loc

随机推荐