目录
Runtime.getRuntime().maxMemory()
获取JVM最大可用堆内存
的方法,以字节为单位。可自己配置大小:-Xmx512M
( 默认64M
)
Runtime.getRuntime().totalMemory()
JVM当前已分配
的堆内存总量,即JVM实际从操作系统请求到的内存
Runtime.getRuntime().freeMemory()
JVM这个进程从操作系统挖请求到的内存里还没用上
内存大小;
-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("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
}
}