首頁技術(shù)文章正文

Java虛擬機(jī)中獲得Runtime實(shí)例的方法是什么?

更新時(shí)間:2021-07-05 來源:黑馬程序員 瀏覽量:

IT培訓(xùn)班


Runtime類用于表示Java虛擬機(jī)運(yùn)行時(shí)的狀態(tài),它用于封裝Java虛擬機(jī)進(jìn)程。每次使用“java”命令啟動(dòng)Java虛擬機(jī)時(shí)都會(huì)對(duì)應(yīng)一個(gè)Runtime實(shí)例,并且只有一個(gè)實(shí)例,應(yīng)用程序會(huì)通過該實(shí)例與其運(yùn)行時(shí)的環(huán)境相連。應(yīng)用程序不能創(chuàng)建自己的Runtime實(shí)例,若想在程序中獲得一個(gè)Runtime實(shí)例,可以通過getRuntime()方法獲取與之相關(guān)的Runtime對(duì)象,具體方式如下:
Runtime run = Runtime.getRuntime();
由于Runtime類封裝了Java虛擬機(jī)進(jìn)程,因此,可以通過該類的實(shí)例對(duì)象來獲取當(dāng)前虛擬機(jī)的相關(guān)信息。接下來通過一個(gè)案例來演示Runtime類的使用,如文件1所示。

文件1 Example12.java

     public class Example12 {
         public static void main(String[] args) {
             Runtime rt = Runtime.getRuntime(); // 獲取Java程序關(guān)聯(lián)的運(yùn)行時(shí)對(duì)象
             System.out.println("處理器的個(gè)數(shù): " 
                                    + rt.availableProcessors() + "個(gè)");
             System.out.println("空閑內(nèi)存大小: "
                                    + rt.freeMemory() / 1024 / 1024 + "M");
             System.out.println("最大可用內(nèi)存大小: " 
                                    + rt.maxMemory() / 1024 / 1024 + "M");
         }
     }

運(yùn)行結(jié)果如圖1所示。

創(chuàng)建Runtime實(shí)例

圖1 運(yùn)行結(jié)果

文件1中,通過“Runtime.getRuntime();”方法創(chuàng)建了一個(gè)Runtime的實(shí)例對(duì)象,并分別調(diào)用該對(duì)象的availableProcessors()方法、freeMemory()方法和maxMemory()方法,將當(dāng)前虛擬機(jī)的處理器個(gè)數(shù)、空閑內(nèi)存大小和可用最大內(nèi)存大小的信息打印出來。

需要注意的是,由于每臺(tái)計(jì)算機(jī)的配置和性能不同,該文件的打印結(jié)果也會(huì)有所不同。另外,空閑內(nèi)存大小和可用最大內(nèi)存大小都是以字節(jié)為單位計(jì)算的,文件1中程序的運(yùn)行結(jié)果已經(jīng)換算成了以兆(M)為單位的值。

Runtime類中提供了一個(gè)exec()方法,該方法用于執(zhí)行一個(gè)DOS命令,從而實(shí)現(xiàn)和在命令行窗口中輸入DOS命令同樣的效果。例如,可以通過運(yùn)行“notepad.exe”命令打開一個(gè)Windows自帶的記事本,程序代碼如文件2所示。

文件2 Example13.java

    import java.io.IOException;
     public class Example13 {
         public static void main(String[] args) throws IOException {
             Runtime rt = Runtime.getRuntime(); // 創(chuàng)建Runtime實(shí)例對(duì)象
             rt.exec("notepad.exe");              // 調(diào)用exec()方法
         }
     }

文件2中,調(diào)用了Runtime對(duì)象的exec()方法,并將系統(tǒng)命令“notepad.exe”作為參數(shù)傳遞給方法。運(yùn)行程序后會(huì)在桌面上打開一個(gè)記事本,如圖2所示。

創(chuàng)建Runtime實(shí)例

圖2 記事本

此時(shí),會(huì)在Windows系統(tǒng)中產(chǎn)生一個(gè)新的進(jìn)程notepad.exe,可以通過任務(wù)管理器進(jìn)行觀察,如圖3所示。

創(chuàng)建Runtime實(shí)例

圖3 任務(wù)管理器

Runtime類的exec()方法會(huì)返回一個(gè)Process對(duì)象,該對(duì)象表示操作系統(tǒng)的一個(gè)進(jìn)程,此處為notepad.exe進(jìn)程,通過Process對(duì)象可以對(duì)產(chǎn)生的新進(jìn)程進(jìn)行管理,如關(guān)閉此進(jìn)程只需調(diào)用destroy()方法即可。

接下來通過一個(gè)案例來實(shí)現(xiàn)打開的記事本并在3秒后自動(dòng)關(guān)閉的功能,如文件3所示。

文件3 Example14.java

     public class Example14 {
         public static void main(String[] args) throws Exception {
              // 創(chuàng)建一個(gè)Runtime實(shí)例對(duì)象
             Runtime rt = Runtime.getRuntime();
             // 得到表示進(jìn)程的Process對(duì)象
             Process process = rt.exec("notepad.exe");
             // 程序休眠3秒
             Thread.sleep(3000); 
             // 關(guān)閉進(jìn)程
             process.destroy();
         }
     }

在文件3中,通過調(diào)用Process對(duì)象的destroy()方法,將打開的記事本關(guān)閉了。為了突出演示的效果,使用了Thread類的靜態(tài)方法sleep(long millis)使程序休眠了3秒,因此,程序運(yùn)行后,會(huì)看到打開的記事本在3秒后自動(dòng)關(guān)閉。





猜你喜歡:

Java System類方法詳細(xì)介紹[java培訓(xùn)]

Java中String類初始化的兩種方式?

什么是類?在Java中怎樣聲明類的繼承關(guān)系?

黑馬程序員Java開發(fā)培訓(xùn)

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!