Runtime類
該類用於表示虛擬機(JVM)運行時的狀態,每次啓動JVM都對應一個Runtime實例,且只有一個實例,利用Runtime類可以啓動新的進程或進行相關運行時環境的操作。此外,該類採用單例模式設計,對象不可以直接實例化。所以,取得Runtime實例化對象的的方法爲:public static Runtime getRuntime()
Runtime類的常用方法
No. | 方法 | 類型 | 描述 |
---|---|---|---|
1 | public static Runtime getRuntime() | 普通 | 取得Runtime類的實例化對象 |
2 | public long maxMemory() | 普通 | 返回最大可用內存大小 |
3 | public long totalMemory() | 普通 | 返回所有可用內存大小 |
4 | public long freelMemory() | 普通 | 返回所有空餘內存大小 |
5 | public void gc() | 普通 | 執行垃圾回收操作 |
6 | public Process exec(String command)throw IOException | 普通 | 創建新的進程 |
注意:取得內存信息時,返回的數據爲long
例:觀察內存大小
package Project.Study.RuntimeClass;
public class Test1 {
public static void main(String[]args){
Runtime run=Runtime.getRuntime(); //取得Runtime類的實例化對象
System.out.println("MAX="+run.maxMemory()); //取得最大可用內存
System.out.println("TOTAL="+run.totalMemory()); //取得全部可用內存
System.out.println("FREE="+run.freeMemory()); //取得空閒內存
}
}
//結果:
//MAX=2111832064
//TOTAL=132120576
//FREE=129517640
本程序動態取得當前系統中的各個內存空間信息,返回的結果單位是字節(Byte)。
值得注意的是,我們可以設置啓動時的內存大小
Java中的內存劃分:
每一塊內存空間都會存在一個內存伸縮區,當內存不足時就會動態開闢。我們可以使用以下參數申請內存空間:
“-Xms”:初始分配內存,默認大小爲1/64物理內存大小,但小於1G;
“-Xmx”:最大分配內存,默認大小爲1/4物理內存大小,但小於1G;
“-Xmn”:設置年輕代堆內存大小。
一般會將“-Xms”和“-Xmx”兩個參數的數值設爲相同,以減少申請內存空間的時間。
gc()方法的使用
gc()方法可以實現垃圾內存釋放的處理操作
例:觀察gc()方法的使用
package Project.Study.RuntimeClass;
public class Test2 {
public static void main(String[]args){
Runtime run=Runtime.getRuntime(); //取得Runtime類的實例化對象
String str="";
for(int x=0;x<2000;x++){ //進行循環操作,產生大量垃圾,佔用內存
str+=x;
}
System.out.println("【垃圾處理前的內存量】MAX="+run.maxMemory());
System.out.println("【垃圾處理前的內存量】TOTAL="+run.totalMemory());
System.out.println("【垃圾處理前的內存量】FREE="+run.freeMemory());
run.gc(); //釋放垃圾空間
System.out.println("[垃圾處理後的內存量]MAX="+run.maxMemory());
System.out.println("[垃圾處理後的內存量]TOTAL="+run.totalMemory());
System.out.println("[垃圾處理後的內存量]FREE="+run.freeMemory());
}
}
//結果:
//【垃圾處理前的內存量】MAX=2111832064
//【垃圾處理前的內存量】TOTAL=132120576
//【垃圾處理前的內存量】FREE=122711832
//[垃圾處理後的內存量]MAX=2111832064
//[垃圾處理後的內存量]TOTAL=10485760
//[垃圾處理後的內存量]FREE=9292944 (???)
關於垃圾回收處理和對象創建
Runtime類有一個有意思的功能,可以通過它調用本機的可執行程序,並創建進程。
例:創建“mspaint.exe”(Windows的畫板)進程
package Project.Study.RuntimeClass;
public class Test3 {
public static void main(String[]args) throws Exception {
Runtime run=Runtime.getRuntime(); //取得Runtime實例化對象
Process pro=run.exec("mspaint.exe"); //調用本機可執行程序
Thread.sleep(2000); //運行2s後自動關閉
pro.destroy(); //銷燬進程
}
}
效果: