1. 程式人生 > >Runtime獲取系統資源資訊類

Runtime獲取系統資源資訊類

Runtime類描述的是執行時的狀態,也就是說在整個JVM之中,Runtime類是唯一一個與JVM執行狀態有關的類,並且都會預設提供一個該類的例項化物件。
由於在每一個JVM程序裡面只允許提供一個Runtime類的物件,所以這個類的構造方法被預設私有化了,並且該類使用的是單例設計模式,並且單例設計模式一定會提供一個static方法獲取本類例項。
作業系統直接對CPU、程序、記憶體進行管理,程式執行過程中JVM通過作業系統提供的函式可以對cpu、程序、記憶體資訊進行獲取,JVM將資源資訊通過Runtime類進行儲存,在開發過程中要想獲取系統的資源情況,必須通過Runtime類來獲取,這時候也就必須保證Runtime的唯一。
在這裡插入圖片描述

由於Runtime類屬於單例設計模式,如果要想獲取例項化物件,那麼就可以依靠類中的getRuntime()方法完成

  • 獲取例項化物件:public static Runtime getRuntime();
    通過Runtime類中的availableProcessors()方法可以獲取本機的CPU的核心數:public native int availableProcessors();
    **範例:**獲取Runtime類物件
public static void main(String[] args) {
     Runtime run = Runtime.getRuntime();
        System.out.println(run.availableProcessors());
    }

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

  • 獲取最大可用記憶體空間:public long maxMemory();預設的配置為本機系統記憶體的四分之一
  • 獲取可用記憶體空間:public long totalMemory();預設的配置為本機系統六十四分之一
  • 獲取空閒記憶體空間:public long freeMemory()
  • 手工進行GC處理:public void gc();
    **範例:**觀察記憶體狀態
public class JavaApi {
    public static void main(String[] args) {
     Runtime run = Runtime.getRuntime();
        System.out.println(run.availableProcessors());
        System.out.println("【1】MEX_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】MEX_MEMORY:"+ run.maxMemory());
        System.out.println("【2】TOTAL_MEMORY:" + run.totalMemory());
        System.out.println("【2】FREE_MEMORY:" + run.freeMemory());
        run.gc();
        System.out.println("【3】MEX_MEMORY:"+ run.maxMemory());
        System.out.println("【3】TOTAL_MEMORY:" + run.totalMemory());
        System.out.println("【3】FREE_MEMORY:" + run.freeMemory());
    }
}

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

  • GC(Gargabe Collector)垃圾收集器,是可以由系統自動呼叫的垃圾釋放功能,或者使用Runtime類中gc()方法進行呼叫。