1、关于Runtime的totalMemory和freeMemory的区别
很简单,totalMemory就是目前jvm中的内存总量,这个值是可以变的,最大等于你设定的jvm可用最大内存总量(eg.-Xmx512M表明你的jvm最大内存量就是512M),最小等于你设定的jvm最小内存总量(-Xms128M)。
freeMomory就是当前jvm中可以用来分配的内存量。
2、为了检测一个方法到底是多么的耗费内存,我写了个线程来监视它,在方法调用之前启动该线程,调用后停止该线程,线程执行期间会定期的打印出内存情况到控制台。
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;
}
}