1、類依賴分析器:jdeps
jdeps是一個相當棒的命令列工具,它可以展示包層級和類層級的Java類依賴關係,它以.class檔案、目錄或者Jar檔案為輸入,然後會把依賴關係輸出到控制檯。
我們可以利用jedps分析下Spring Framework庫。
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
複製程式碼
2、JVM的新特性
使用Metaspace(JEP 122)代替持久代(PermGen space)。在JVM引數方面,使用-XX:MetaSpaceSize和-XX:MaxMetaspaceSize代替原來的-XX:PermSize和-XX:MaxPermSize。
3、語言特性
1、Lambda表示式和函式式介面
2、介面的預設方法和靜態方法
3、方法引用
4、重複註解
5、更好的型別推斷
6、拓寬註解的應用場景
Java 8拓寬了註解的應用場景。現在,註解幾乎可以使用在任何元素上:區域性變數、介面型別、超類和介面實現類,甚至可以用在函式的異常定義上。ElementType.TYPE_USER和ElementType.TYPE_PARAMETER是Java 8新增的兩個註解,用於描述註解的使用場景。Java 語言也做了對應的改變,以識別這些新增的註解。下面是一些例子:
package com.javacodegeeks.java8.annotations;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.util.ArrayList;
import java.util.Collection;
public class Annotations {
@Retention( RetentionPolicy.RUNTIME )
@Target( { ElementType.TYPE_USE, ElementType.TYPE_PARAMETER } )
public @interface NonEmpty {
}
public static class Holder< @NonEmpty T > extends @NonEmpty Object {
public void method() throws @NonEmpty Exception {
}
}
@SuppressWarnings( "unused" )
public static void main(String[] args) {
final Holder< String > holder = new @NonEmpty Holder< String >();
@NonEmpty Collection< @NonEmpty String > strings = new ArrayList<>();
}
}
複製程式碼
7、針對Collection集合的並行處理 Streams
8、最新的 Date/Time API
9、Nashorn JavaScript引擎
10、對Base64編碼的支援
11、並行陣列
Java8版本新增了很多新的方法,用於支援並行陣列處理。最重要的方法是parallelSort(),可以顯著加快多核機器上的陣列排序。下面的例子論證了parallexXxx系列的方法:
12、併發性
基於新增的lambda表示式和steam特性,為Java 8中為java.util.concurrent.ConcurrentHashMap類新增了新的方法來支援聚焦操作;另外,也為java.util.concurrentForkJoinPool類新增了新的方法來支援通用執行緒池操作(更多內容可以參考我們的併發程式設計課程)。
Java 8還新增了新的java.util.concurrent.locks.StampedLock類,用於支援基於容量的鎖——該鎖有三個模型用於支援讀寫操作(可以把這個鎖當做是java.util.concurrent.locks.ReadWriteLock的替代者)。
在java.util.concurrent.atomic包中也新增了不少工具類,列舉如下:
DoubleAccumulatorDoubleAdderLongAccumulatorLongAdder複製程式碼