本帖最后由 tuan2016 于 2016-5-15 00:17 编辑
4.6 并行(parallel)数组Java 8增加了大量的新方法来对数组进行并行处理。可以说,最重要的是parallelSort()方法,因为它可以在多核机器上极大提高数组排序的速度。下面的例子展示了新方法(parallelXxx)的使用。 - package com.javacodegeeks.java8.parallel.arrays;
- import java.util.Arrays;
- import java.util.concurrent.ThreadLocalRandom;
- public class ParallelArrays {
- public static void main( String[] args ) {
- long[] arrayOfLong = new long [ 20000 ];
-
- Arrays.parallelSetAll( arrayOfLong,
- index -> ThreadLocalRandom.current().nextInt( 1000000 ) );
- Arrays.stream( arrayOfLong ).limit( 10 ).forEach(
- i -> System.out.print( i + " " ) );
- System.out.println();
-
- Arrays.parallelSort( arrayOfLong );
- Arrays.stream( arrayOfLong ).limit( 10 ).forEach(
- i -> System.out.print( i + " " ) );
- System.out.println();
- }
- }
复制代码
上面的代码片段使用了parallelSetAll()方法来对一个有20000个元素的数组进行随机赋值。然后,调用parallelSort方法。这个程序首先打印出前10个元素的值,之后对整个数组排序。这个程序在控制台上的输出如下(请注意数组元素是随机生产的): - Unsorted: 591217 891976 443951 424479 766825 351964 242997 642839 119108 552378
- Sorted: 39 220 263 268 325 607 655 678 723 793
复制代码
4.7 并发(Concurrency)在新增Stream机制与lambda的基础之上,在java.util.concurrent.ConcurrentHashMap中加入了一些新方法来支持聚集操作。同时也在java.util.concurrent.ForkJoinPool类中加入了一些新方法来支持共有资源池(common pool)(请查看我们关于Java 并发的免费课程)。 新增的java.util.concurrent.locks.StampedLock类提供一直基于容量的锁,这种锁有三个模型来控制读写操作(它被认为是不太有名的java.util.concurrent.locks.ReadWriteLock类的替代者)。 在java.util.concurrent.atomic包中还增加了下面这些类: - DoubleAccumulator
- DoubleAdder
- LongAccumulator
- LongAdder
5. 新的Java工具Java 8也带来了一些新的命令行工具。在这节里我们将会介绍它们中最有趣的部分。
5.1 Nashorn引擎: jjsjjs是个基于Nashorn引擎的命令行工具。它接受一些JavaScript源代码为参数,并且执行这些源代码。例如,我们创建一个具有如下内容的func.js文件: - function f() {
- return 1;
- };
- print( f() + 1 );
复制代码
我们可以把这个文件作为参数传递给jjs使得这个文件可以在命令行中执行:
下面是程序在控制台上的输出: 2更多详情请参考官方文档
5.2 类依赖分析器jdepsjdeps是一个很有用的命令行工具。它可以显示Java类的包级别或类级别的依赖。它接受一个.class文件,一个目录,或者一个jar文件作为输入。jdeps默认把结果输出到系统输出(控制台)上。 下面我们查看现阶段较流行的Spring框架类库的依赖报告,为了简化这个例子,我们只分析一个jar文件:org.springframework.core-3.0.5.RELEASE.jar jdeps org.springframework.core-3.0.5.RELEASE.jar这个命令输出的内容很多,所以这里我们只选取一小部分。依赖信息按照包名进行分组。如果依赖不在classpath中,那么就会显示not found。 - org.springframework.core-3.0.5.RELEASE.jar -> C:\Program Files\Java\jdk1.8.0\jre\lib\rt.jar
- org.springframework.core (org.springframework.core-3.0.5.RELEASE.jar)
- -> java.io
- -> java.lang
- -> java.lang.annotation
- -> java.lang.ref
- -> java.lang.reflect
- -> java.util
- -> java.util.concurrent
- -> org.apache.commons.logging not found
- -> org.springframework.asm not found
- -> org.springframework.asm.commons not found
- org.springframework.core.annotation (org.springframework.core-3.0.5.RELEASE.jar)
- -> java.lang
- -> java.lang.annotation
- -> java.lang.reflect
- -> java.util
复制代码
更多详情请参考官方文档 6. Java虚拟机(JVM)的新特性PermGen空间被移除了,取而代之的是Metaspace(JEP 122)。JVM选项-XX:PermSize与-XX:MaxPermSize分别被-XX:MetaSpaceSize与-XX:MaxMetaspaceSize所代替。
7. 总结更多展望:Java 8通过发布一些可以增加程序员生产力的特性来推进这个伟大的平台的进步。现在把生产环境迁移到Java 8还为时尚早,但是在接下来的几个月里,它会被大众慢慢的接受。毫无疑问,现在是时候让你的代码与Java 8兼容,并且在Java 8足够安全稳定的时候迁移到Java 8。 作为社区对Java 8的认可,最近Pivotal发布了可在生产环境下支持Java 8的Spring Framework 4.0.3。 如果你喜欢这篇文章,请订阅我们的邮件列表来查看每周的更新以及免费赠送的白皮书。对于更高级的教程,请查看我们的[JCG学院][JCG]。 我们欢迎你对Java 8中激动人心的特性进行评论!
|