天天看點

Runtime類:為Java運作保駕護航 | 帶你學《Java語言進階特性》之十八

上一篇:使用AutoCloseable實作資源自動關閉 | 帶你學《Java語言進階特性》之十七

Runtime類是唯一一個與JVM運作狀态有關的類,它可以支援開發者完成對程式運作時記憶體的諸如檢視最大空間、擷取可用/空閑記憶體空間、手動GC等一系列操作,快來了解吧。

【本節目标】

通過閱讀本節内容,你将了解到Runtime在程式運作中的重要地位,并能夠通過合适的調用方法擷取執行個體,進行記憶體分析和手動垃圾處理等操作,對Java程式的運作過程有更深入的了解。

Runtime類

Runtime描述的是運作時的狀态,也就是說在整個JVM中,Runtime類是唯一一個與JVM運作狀态有關的類,并且都會預設提供有一個該類的執行個體化對象。

由于在每一個JVM程序裡面隻允許提供有一個Runtime類的對象,是以這個類的構造方法被預設私有化了,那麼就證明該類使用的是單例設計模式,并且單例設計模式一定會提供一個static方法擷取本類執行個體。

Runtime類:為Java運作保駕護航 | 帶你學《Java語言進階特性》之十八

Runtime

由于Runtime類屬于單例設計模式,如果想要擷取執行個體化對象,那麼就可以依靠類中的getRuntime()方法完成:

  • 擷取執行個體化對象: public static Runtime getRuntime();

通過這個類中的availableProcessors()方法可以擷取本機的CPU核心數:public int availableProcessors​();

範例:擷取Runtime對象

public class JavaAPIDemo {
    public static void main(String[] args) throws Exception{
        Runtime run=Runtime.getRuntime();    //擷取執行個體化對象
        System.out.println(run.availableProcessors());
    }
}           

但是除了以上的方法之外,在Runtime類裡面還提供有以下四個重要的操作方法:

  • 擷取最大可用記憶體空間:public long maxMemory(),預設的配置為本機系統記憶體的4分之1;
  • 擷取可用記憶體空間:public long totalMemory(),預設的配置為本機系統記憶體的64分之1;
  • 擷取空閑記憶體空間:public long freeMemory();
  • 手工進行GC處理:public void gc();

範例:觀察記憶體狀态

public class JavaAPIDemo {
    public static void main(String[] args) throws Exception{
        Runtime run=Runtime.getRuntime();      //擷取執行個體對象
        System.out.println("【1】MAX_MEMORY:"+run.maxMemory());
        System.out.println("【1】TOTAL_MEMORY:"+run.totalMemory());
        System.out.println("【1】FREE_MEMORY:"+run.freeMemory());
        String str="";
        for (int x = 0; x < 30000; x++) {
            str += x;    //産生大量的垃圾空間
        }
        System.out.println("【2】MAX_MEMORY:"+run.maxMemory());
        System.out.println("【2】TOTAL_MEMORY:"+run.totalMemory());
        System.out.println("【2】FREE_MEMORY:"+run.freeMemory());
        Thread.sleep(2000);
        run.gc();
        System.out.println("【3】MAX_MEMORY:"+run.maxMemory());
        System.out.println("【3】TOTAL_MEMORY:"+run.totalMemory());
        System.out.println("【3】FREE_MEMORY:"+run.freeMemory());
    }
}           
Runtime類:為Java運作保駕護航 | 帶你學《Java語言進階特性》之十八

運作結果圖

面試題:請問什麼是GC?如何處理?

GC(Garbage Collector)垃圾收集器,是可以由系統自動調用的垃圾釋放功能,或者使用Runtime類中的gc()手工調用。

想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。

本内容視訊來源于

阿裡雲大學 下一篇:一文帶你了解Java其他基礎類庫 | 帶你學《Java語言進階特性》之十九 更多Java面向對象程式設計文章檢視此處