java內(nèi)存監(jiān)測(cè)
1、關(guān)于Runtime的totalMemory和freeMemory的區(qū)別很簡(jiǎn)單,totalMemory就是目前jvm中的內(nèi)存總量,這個(gè)值是可以變的,最大等于你設(shè)定的jvm可用最大內(nèi)存總量(eg.-Xmx512M表明你的jvm最大內(nèi)存量就是512M),最小等于你設(shè)定的jvm最小內(nèi)存總量(-Xms128M)。
freeMomory就是當(dāng)前jvm中可以用來(lái)分配的內(nèi)存量。
2、為了檢測(cè)一個(gè)方法到底是多么的耗費(fèi)內(nèi)存,我寫(xiě)了個(gè)線程來(lái)監(jiān)視它,在方法調(diào)用之前啟動(dòng)該線程,調(diào)用后停止該線程,線程執(zhí)行期間會(huì)定期的打印出內(nèi)存情況到控制臺(tái)。
public class MemoryListner implements Runnable {
private boolean stop1;
public MemoryListner(boolean stop) {
this.stop1 = stop;
}
public void run() {
while (!stop1) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Runtime.getRuntime().totalMemory()+":"+Runtime.getRuntime().freeMemory());
}
System.out.println("Complete");
}
public void stop(){
this.stop1 = true;
}
}
private boolean stop1;
public MemoryListner(boolean stop) {
this.stop1 = stop;
}
public void run() {
while (!stop1) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Runtime.getRuntime().totalMemory()+":"+Runtime.getRuntime().freeMemory());
}
System.out.println("Complete");
}
public void stop(){
this.stop1 = true;
}
}
posted on 2007-06-01 08:58 lqx 閱讀(402) 評(píng)論(0) 編輯 收藏