Runtime.getRuntime().maxMemory()
JVM(这个进程)能够
从操作系统那里挖到的最大的内存,以字节为单位。可自己配置大小:-Xmx512M
( 默认64M)
Runtime.getRuntime().totalMemory()
java虚拟机已经
从操作系统那里挖过来的内存总大小,也就是java虚拟机这个进程此时此刻的内存大小;
Runtime.getRuntime().freeMemory()
JVM这个进程从操作系统挖过来的内存里还没用上
内存大小;
[Q&A] -Xms对内存变化的影响
如果在运行java的时候没有添加 -Xms 参数:
在java程序运行的过程中,内存总是慢慢
的从操作系统那里挖的,基本上是用多少挖多少,但是java虚拟机100%的情况下是会稍微多挖一点的,直挖到maxMemory()
为止,所以totalMemory()
是慢慢增大的,此时freeMemory()
的值一般情况下都是很小的
如果在运行java的时候用了 -Xms参数:
Java程序在启动的时候就会无条件的从操作系统中挖 -Xms
后面定义的内存数,然后在这些内存用的差不多的时候,再去挖;这个时候,挖过来的内存可能大部分没用上,所以这个时候freeMemory()
可能会有些大
测试代码
public class RuntimePrac {
public static void main(String[] args) {
printRuntime();
byte[] b1 = new byte[3 * 1024 * 1024];
printRuntime();
byte[] b2 = new byte[4 * 1024 * 1024];
printRuntime();
}
private static void printRuntime() {
System.out.println("java虚拟机从操纵系统那里挖到的最大的内存 maxMemory " + Runtime.getRuntime().maxMemory() / 1024 / 1024 + "M");
System.out.println("java虚拟机已经从操作系统那里挖过来的内存 totalMemory : " + Runtime.getRuntime().totalMemory() / 1024 / 1024 + "M");
System.out.println("java虚拟机从操纵系统挖过来还没用上的内存 freeMemory : " + Runtime.getRuntime().freeMemory() / 1024 / 1024 + "M");
System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
}
}