Java8特性總結

wangchun_166發表於2017-12-26

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的新特性

       使用MetaspaceJEP 122)代替持久代(PermGen space)。在JVM引數方面,使用-XX:MetaSpaceSize-XX:MaxMetaspaceSize代替原來的-XX:PermSize-XX:MaxPermSize


3、語言特性

        1、Lambda表示式和函式式介面

        2、介面的預設方法和靜態方法

        3、方法引用

        4、重複註解

        5、更好的型別推斷

        6、拓寬註解的應用場景

             Java 8拓寬了註解的應用場景。現在,註解幾乎可以使用在任何元素上:區域性變數、介面型別、超類和介面實現類,甚至可以用在函式的異常定義上。ElementType.TYPE_USERElementType.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複製程式碼

             


相關文章