知行

总结之后必有收获 开始使用

Java 8 相关知识

**0.1 **HashMap 的底层实现有变化:HashMap 是数组 + 链表 + 红黑树(JDK1.8 增加了红黑树部分)实现。

**02.**JVM 内存管理方面,由元空间代替了永久代。

区别:

1. 元空间并不在虚拟机中,而是使用本地内存;

2. 默认情况下,元空间的大小仅受本地内存限制;

3. 也可以通过 -XX:MetaspaceSize 指定元空间大小。

**03.**Lambda 表达式(也称为闭包),允许我们将函数当成参数传递给某个方法,或者把代码本身当做数据处理。

**04. **函数式接口:指的是只有一个函数的接口,java.lang.Runnable 和 java.util.concurrent.Callable 就是函数式接口的例子;java8 提供了一个特殊的注解 @Functionallnterface 来标明该接口是一个函数式接口。

**05.**引入重复注解:Java 8 中使用 @Repeatable 注解定义重复注解。

**06. **接口中可以实现方法 default 方法。

**07.**注解的使用场景拓宽: 注解几乎可以使用在任何元素上:局部变量、接口类型、超类和接口实现类,甚至可以用在函数的异常定义上。

08. 新的包 java.time 包

  1. 包含了所有关于日期、时间、时区、持续时间和时钟操作的类。(Java 8 的日期与时间问题解决方案

  2. 这些类都是不可变的、线程安全的。

ps:JDK6 和 JDK7 中的 substring()方法中的实现方式不一样

实际上是 String() 和 substring() 两个方法在 JDK6(同对象-标识),JDK7(新对象)中的区别,是构造方法的实现变了
String sub = old.substring(begin,end); 在 JDK6 中,这个调用会导致 sub.value 与 old.value 引用同一数组内存:sub.value==old.value 为 true。而在 JDK7 中为 false。

所以事实上 JDK6 的取子串的方法是有效率的,而 JDK7 中的 String(char[],int,int)实现中 Arrays.copyOfRange 的调用 ,虽是本地方法,但当字符串很大时还是有效率问题。总之 JDK7 中区别体现更多的是为了安全,而不是性能。

评论
留下你的脚步
推荐阅读