java8新特性
- JAVA8自java5以来一次比较大的更新,引入许多新特性,主要涉及:语言、编译器、类库、开发工具、jvm等方面
- Java语言新特性
- Lambda表达式(也叫闭包)和函数式接口(Functional Interface,也称SAM接口),即Single Abstract Method interfaces,这个接口里面只能有一个抽象方法
- 接口可以有默认方法和静态方法,还允许定义java.lang.Object里的public方法:可以参考Comparator
- 方法引用、构造引用:
objectName::instanceMethod
ClassName::staticMethod
ClassName::instanceMethod - 重复注解:前提重复注解本身需要被@Repeatable注释
- 更好的类型推断
- 注解的扩展:几乎可以在所有的地方(局部变量、泛型、超类和接口实现、甚至是方法的Exception声明)使用注解
- Java编译器的新特性
- 参数名字的获取:一直以来,Java程序员想尽办法把参数名字保存在java字节码里,并且让这些参数名字在运行时可用。Java 8 终于把这个需求加入到了Java语言(使用反射API和Parameter.getName()方法)和字节码里(使用java编译命令javac的–parameters参数)
- Java库的新特性:更好地支持现代并发、函数式编程、日期\时间等等
- Optional:受google guava影响,java引入Optional
- Stream API引入了在Java里可以工作的函数式编程
- 日期时间API(JSR310):由于Date与Calendar教训,java吸取Joda-Time精华,定义新的API
- Nashorn javascript引擎:新的Nashorn javascript引擎,它允许我们在JVM上运行特定的javascript应用。Nashorn javascript引擎只是javax.script.ScriptEngine另一个实现,而且规则也一样,允许Java和JavaScript互相操作
- Base64成为Java8标准库一部分
- 并行数组:Java 8新增加了很多方法支持并行的数组处理。最重要的大概是parallelSort()这个方法显著地使排序在多核计算机上速度加快
- 并发:在Stream机制与lambda的基础之上,ConcurrentHashMap加入了一些新方法来支持聚集操作。同时也在java.util.concurrent.ForkJoinPool类中加入了一些新方法来支持共有资源池(common pool),新增StampedLock提供一直基于容量的锁,这种锁有三个模型来控制读写操作(它被认为是不太有名的ReadWriteLock类的替代者)
- 新的工具
- Nashorn引擎-jjs:jjs是个基于Nashorn引擎的命令行工具。它接受一些JavaScript源代码为参数,并且执行这些源代码
- 类依赖分析工具-jdeps:Jdeps是一个功能强大的命令行工具,它可以帮我们显示出包层级或者类层级java类文件的依赖关系,语法如jdeps org.springframework.core-3.0.5.RELEASE.jar
- JVM的新特性
- JVM内存永久区已经被metaspace替换(JEP 122)。JVM参数 -XX:PermSize 和 –XX:MaxPermSize被XX:MetaSpaceSize 和 -XX:MaxMetaspaceSize代替
- 小结:转载ifeve.com