Runtime描述的是運行時的狀態,在每一個JVM進程之中都會提供唯一的一個Runtime類實例化對象,開發者可以通過Runtime類對象獲取與JVM有關的運行時狀態。
由於Runtime類中只存在一個實例化對象,所以在Runtime類中默認將其構造方法封裝(單例設計模擬),這樣開發者就必須利用Runtime類中提供的getRuntime()方法(爲static方法)來獲取實例化對象,隨後就可以獲取一些系統的相關信息。
Runtime類常用方法
範例:獲取本機的CPU處理器數量
public class JavaAPIDemo344a {
public static void main(String[] args) {
Runtime runtime=Runtime.getRuntime(); //獲取Runtime實例化對象
System.out.println(runtime.availableProcessors()); //獲取可用的CPU處理器數量
}
}
執行結果
4
由於筆者使用計算機爲4核CPU,所以當時用availableProcessors()返回的內容就是4。
程序執行中除了需要CPU外,還需要提供有內存的支持,在Runtime類中定義有三個內存數據的返回方法:maxMemory()、totalMemory()、freeMemory()。注意:取得內存信息時,返回的數據爲long。long型數據使用主要有兩種情況:表示文件大小和表示日期時間。
範例:獲取主機內存信息
public class avaAPIDemo344b {
public static void main(String[] args) {
Runtime run=Runtime.getRuntime(); //獲取實例化對象
System.out.println("最大可用內存:"+run.maxMemory());//獲取最大可用內存
System.out.println("總共可用內存"+run.totalMemory());//獲取總共可用內存
System.out.println("空閒內存"+run.freeMemory()); //獲取空閒內存
}
}
執行結果
最大可用內存:1883242496
總共可用內存:128974848
空閒內存:126929976
本程序獲取了當前可用的內存信息,實際上當用戶不進行任何操作時,最大的可用內存爲本機內存的1/4,而可用內存爲本機內存的1/64。
java本身提供有垃圾收集機制,對於GC線程而言,除了可以不定期處理外,也可以利用Runtime類中提供的gc()方法進行手動內存釋放。
範例:觀察GC操作
public class JavaAPIDemo345 {
public static void main(String[] args) {
Runtime run=Runtime.getRuntime(); //獲取實例化對象
System.out.println("【1】可用內存"+run.totalMemory()); //獲取可用內存
System.out.println("【1】空閒內存"+run.freeMemory()); //獲取空閒內存
String str="";
for (int x = 0; x < 3000; x++) {
str+=x; //產生垃圾空間
}
System.out.println("【2】可用內存"+run.totalMemory()); //獲取可用內存
System.out.println("【2】空閒內存"+run.freeMemory()); //獲取空閒內存
run.gc(); //內存釋放
System.out.println("【3】可用內存"+run.totalMemory()); //獲取可用內存
System.out.println("【3】空閒內存"+run.freeMemory()); //獲取空閒內存
}
}
執行結果
【1】可用內存128974848
【1】空閒內存126929976
【2】可用內存128974848
【2】空閒內存98738488
【3】可用內存163053568
【3】空閒內存161161776
通過空閒內存的對比實現演示了垃圾產生前後的內存空間大小以及GC之後的空閒內存大小。