• 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)
  • 相关阅读:
    django + dropzone.js 上传文件
    随机知识点---后续整理
    Python项目在Jenkins中的自动化测试实践(语法检查、单元测试,coverage(代码覆盖率)、自动打包)
    my read / zikao / nanjingdaxue
    OS + CentOS kernel parameter
    network / Wireshark
    使用docker部署springBoot并且yml配置文件不打包到jar中
    idea + springBoot项目配置远程调试
    MySql优化建议
    springBoot事务失效导致批量插入性能巨幅降低
  • 原文地址:https://www.cnblogs.com/liconglong/p/12182244.html
Copyright © 2020-2023  润新知