java基礎(chǔ):java.lang.Runtime

Runtime簡(jiǎn)介

當(dāng)程序運(yùn)行時(shí)聪廉,每個(gè)java應(yīng)用程序都能得到一個(gè)運(yùn)行時(shí)的實(shí)例树绩,應(yīng)用程序不能創(chuàng)建這個(gè)實(shí)例,只能從getRuntime()方法獲得RunTime實(shí)例筝蚕。

1. RunTime是單例模式卦碾,不能實(shí)例化

private static Runtime currentRuntime = new Runtime();
public static Runtime getRuntime() { 
    return currentRuntime;
}
private Runtime() {}

我們看到源碼是單例模式實(shí)例(餓漢式,線(xiàn)程安全 但效率比較低 ),設(shè)計(jì)成單例主要是從節(jié)約系統(tǒng)資源來(lái)考慮起宽。

2. Runtime幾個(gè)核心方法

  • exec("notepad");
    在單獨(dú)的進(jìn)程中執(zhí)行指定的字符串命令洲胖。


    Paste_Image.png
  • exec("notepad","demo");
    在單獨(dú)的進(jìn)程中執(zhí)行指定命令和變量。
Paste_Image.png
  • availableProcessors();
    向 Java 虛擬機(jī)返回可用處理器的數(shù)目坯沪。
    int num = Runtime.getRuntime().availableProcessors();
    System.out.println("返回本機(jī)處理器結(jié)果:" + num);
    返回本機(jī)處理器結(jié)果:4

  • Runtime.getRuntime().freeMemory();
    返回 Java 虛擬機(jī)中的空閑內(nèi)存量绿映。
    Long memory = Runtime.getRuntime().freeMemory();
    System.out.println(memory);

  • gc();
    運(yùn)行垃圾回收器。
    try {
    Long memoryBefor = Runtime.getRuntime().freeMemory();
    System.out.println("當(dāng)前內(nèi)存: "+memoryBefor);
    Runtime.getRuntime().gc();
    Long memoryAfter = Runtime.getRuntime().freeMemory();
    System.out.println("執(zhí)行完GC后內(nèi)存:"+memoryAfter);
    } catch (Exception e) {
    e.printStackTrace();
    }
當(dāng)前內(nèi)存: 15722728
執(zhí)行完GC后內(nèi)存:16027912
  • load(String filename)
    加載作為動(dòng)態(tài)庫(kù)的指定文件名腐晾。

  • maxMemory() ;
    返回 Java 虛擬機(jī)試圖使用的最大內(nèi)存量叉弦。
    Long maxMemeory = Runtime.getRuntime().maxMemory();
    System.out.println(maxMemeory);
    259522560

  • totalMemory()
    返回 Java 虛擬機(jī)中的內(nèi)存總量。
    try {
    Long freeMemory = Runtime.getRuntime().freeMemory();
    System.out.println(freeMemory);
    Long totalMemory = Runtime.getRuntime().totalMemory();
    System.out.println(totalMemory);
    System.out.println("已使用:" + (totalMemory - freeMemory));
    } catch (Exception e) {
    e.printStackTrace();
    }

15722728
16252928
已使用:530200
  • traceInstructions(on)
    啟用/禁用跟蹤的指令藻糖。如果布爾參數(shù)是正確的,該方法表明,Java虛擬機(jī)發(fā)出調(diào)試信息每條指令的執(zhí)行虛擬機(jī)淹冰。這些信息的格式,文件或其他輸出流釋放它,取決于主機(jī)環(huán)境。虛擬機(jī)可能會(huì)忽略這個(gè)請(qǐng)求,如果它不支持此功能巨柒。跟蹤輸出的目的地是依賴(lài)于系統(tǒng)的樱拴。
    如果布爾參數(shù)是假的,這個(gè)方法會(huì)導(dǎo)致虛擬機(jī)停止執(zhí)行的詳細(xì)指令跟蹤執(zhí)行柠衍。
    我在本機(jī)(hotspot JDK1.8)不管如何測(cè)試,都沒(méi)打印出任何信息晶乔,不知是否是虛擬機(jī)不支持還是什么情況珍坊。
  • traceMethodCalls(on)
    啟用/禁用方法調(diào)用跟蹤,同上正罢。

3. RunTime應(yīng)用

  • 內(nèi)存監(jiān)控

我們可以結(jié)合RunTime方法幾個(gè)特點(diǎn)阵漏,做個(gè)實(shí)時(shí)內(nèi)存監(jiān)控,如我監(jiān)控某個(gè)方法執(zhí)行消耗了多少內(nèi)存
public static void main(String[] args) {
Long freeMemery1,freeMemery2;
try {
Runtime r = Runtime.getRuntime();
freeMemery1 = r.freeMemory();
aa();
freeMemery2 = r.freeMemory();
System.out.println("調(diào)用方法aa()使用了" + (freeMemery1 - freeMemery2));
} catch (Exception e) {
e.printStackTrace();
}
}

    public static void aa(){
        byte aa [] = new byte[1024 * 1024];
    }

輸出結(jié)果:
調(diào)用方法aa()使用了1048592

  • JVM實(shí)時(shí)系統(tǒng)內(nèi)存監(jiān)控

讀者可根據(jù)上面的方法自行實(shí)現(xiàn)翻具,實(shí)現(xiàn)依據(jù)是RunTime是單例的履怯,在單機(jī)JVM上拿總內(nèi)存減去空閑內(nèi)存即可

  • 系統(tǒng)小工具

可以windows平臺(tái)上直接調(diào)用,如查看java -version
public static void main(String[] args) {
try {
Runtime r = Runtime.getRuntime();
Process process = r.exec("java");
InputStream in = process.getInputStream();
Scanner scanner;
scanner = new Scanner(in);
while (scanner.hasNext()) {
System.out.println(scanner.nextLine());
}
} catch (Exception e) {
e.printStackTrace();
}
}

Paste_Image.png

總結(jié)

本文是舉例說(shuō)明了我們常見(jiàn)的幾個(gè)方法呛占,其中內(nèi)存監(jiān)控和exec最為常見(jiàn)虑乖。上面示例都實(shí)現(xiàn)并測(cè)試通過(guò),如有不正確晾虑,請(qǐng)批評(píng)指正疹味,謝謝。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末帜篇,一起剝皮案震驚了整個(gè)濱河市糙捺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌笙隙,老刑警劉巖洪灯,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異竟痰,居然都是意外死亡签钩,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)坏快,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)铅檩,“玉大人,你說(shuō)我怎么就攤上這事莽鸿∶林迹” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵祥得,是天一觀的道長(zhǎng)兔沃。 經(jīng)常有香客問(wèn)我,道長(zhǎng)级及,這世上最難降的妖魔是什么乒疏? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮饮焦,結(jié)果婚禮上缰雇,老公的妹妹穿的比我還像新娘入偷。我一直安慰自己追驴,他們只是感情好械哟,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著殿雪,像睡著了一般暇咆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上丙曙,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天爸业,我揣著相機(jī)與錄音,去河邊找鬼亏镰。 笑死扯旷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的索抓。 我是一名探鬼主播钧忽,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼逼肯!你這毒婦竟也來(lái)了耸黑?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤篮幢,失蹤者是張志新(化名)和其女友劉穎大刊,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體三椿,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡缺菌,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了搜锰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片伴郁。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖纽乱,靈堂內(nèi)的尸體忽然破棺而出蛾绎,到底是詐尸還是另有隱情,我是刑警寧澤鸦列,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布租冠,位于F島的核電站,受9級(jí)特大地震影響薯嗤,放射性物質(zhì)發(fā)生泄漏顽爹。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一骆姐、第九天 我趴在偏房一處隱蔽的房頂上張望镜粤。 院中可真熱鬧捏题,春花似錦、人聲如沸肉渴。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)同规。三九已至循狰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間券勺,已是汗流浹背绪钥。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留关炼,地道東北人程腹。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像儒拂,于是被迫代替她去往敵國(guó)和親寸潦。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • Java經(jīng)典問(wèn)題算法大全 /*【程序1】 題目:古典問(wèn)題:有一對(duì)兔子侣灶,從出生后第3個(gè)月起每個(gè)月都生一對(duì)兔子甸祭,小兔子...
    趙宇_阿特奇閱讀 1,844評(píng)論 0 2
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語(yǔ)法,類(lèi)相關(guān)的語(yǔ)法褥影,內(nèi)部類(lèi)的語(yǔ)法池户,繼承相關(guān)的語(yǔ)法,異常的語(yǔ)法凡怎,線(xiàn)程的語(yǔ)...
    子非魚(yú)_t_閱讀 31,587評(píng)論 18 399
  • 第一章 初識(shí)javaJAVA 第一講:什么是程序?:為了讓計(jì)算機(jī)執(zhí)行某些操作或解決某個(gè)問(wèn)題而編寫(xiě)的一系列有序指令的...
    人子日月幾點(diǎn)閱讀 509評(píng)論 0 1
  • 小編費(fèi)力收集:給你想要的面試集合 1.C++或Java中的異常處理機(jī)制的簡(jiǎn)單原理和應(yīng)用校焦。 當(dāng)JAVA程序違反了JA...
    八爺君閱讀 4,574評(píng)論 1 114
  • 夏月偷偷走了 我還是喜慶著小日子與詩(shī) 十月延續(xù)我的滿(mǎn)滿(mǎn)心思 好在我的前奏已有準(zhǔn)備 準(zhǔn)備了好心情去看你的世界 我所剩...
    葉涅夫閱讀 328評(píng)論 0 0