zoukankan      html  css  js  c++  java
  • JDK8--01:JDK8简介


    一、新特性
    1、lambda表达式(重点)
    2、函数式接口
    3、方法引用与构造器引用
    4、Stream API(重点)
    5、接口中的默认方法和静态方法
    6、新时间日期API
    7、其他新特性


    二、特点:
    1、速度更快(底层数据结构调整、垃圾回收机制做了调整、内存结构做了调整、并行处理)
    (1)数据结构调整
    hashMap(所有以hashMap实现的对象,例如hashSet,concurrentHashMap)
    jkd7:数组+链表结构,hash冲突时添加在链表头部
    jdk8:数组+链表(红黑树,当冲突大于8时,链表改为红黑树,除了添加操作,红黑树都比链表快),hash冲突时添加在链表/红黑树尾部
    concurrentHashMap
    jkd7:使用分段锁(Segment,默认分16段)
    jdk8:使用CAS算法(提高效率),同时hash也改为新的hashMap实现方式
    (2)内存结构调整
    jdk7:jvn内存模型分为栈、堆、方法区,其中方法区属于堆中的永久区,中存在永久去和方法区
    jdk8:删除永久区和方法区,新增元空间(MetaSpace),最大的特点:元空间直接使用物理内存作为存储对象
    此处插入一下为什么要废弃永久代
    1)现实使用中易出问题。
    由于永久代内存经常不够用或发生内存泄露,爆出异常 java.lang.OutOfMemoryError: PermGen,使用元数据区,直接使用物理内存,基本上很难出现此错误。
    字符串存在永久代中,容易出现性能问题和内存溢出。
    类及方法的信息等比较难确定其大小,因此对于永久代的大小指定比较困难,太小容易出现永久代溢出,太大则容易导致老年代溢出。
    2)永久代会为 GC 带来不必要的复杂度,并且回收效率偏低。
    3)合并多种jvm版本
    我们使用的是sun公司的jvm(目前被Oracle收购):Oracle-Sun HotSpot
    Oracle公司自己的jvm:JRocket
    IBM公司的jvm:J9 JVM
    国产jvm(阿里):Taobao JVM
    除了sun公司的jvm外,其余的jvm早就没有了永久区和方法区,Oracle可能会将HotSpot与JRockit合二为一,因此将内存结构改为一致。
    2、代码更少(lambda表达式)
    3、强大的Stream API
    4、便于并行
    5、最大化减少空指针异常(optional)
  • 相关阅读:
    boost::asio中的implementation_type介绍
    boost::asio::io_service::run学习笔记
    vim使用笔记
    进程、线程运行状态查看包括线程在cpu上运行情况
    c++自旋锁——学习笔记
    grep搜索过滤指定目录
    /usr/bin/ld: cannot find -lstdc++ -lz问题
    linux下条件变量使用笔记
    map使用笔记
    关于友元函数在类内定义的问题--笔记
  • 原文地址:https://www.cnblogs.com/liconglong/p/12182244.html
Copyright © 2011-2022 走看看