堆参数
常用参数:
-Xms --jvm堆的最小值
-Xmx --jvm堆的最大值
-XX:MaxNewSize --新生代最大值
-XX:MaxPermSize=1028m --永久代最大值
-XX:+PrintGCTimeStamps 输出GC的时间戳(以基准时间的形式)
-XX:+PrintGCDateStamps 输出GC的时间戳(以日期的形式,如 2013-05-04T21:53:59.234+0800)
-XX:+PrintGCDetails --打印出GC的详细信息
-verbose:gc --开启gc日志
-Xloggc:d:/gc.log -- gc日志的存放位置
-Xmn -- 新生代内存区域的大小
-XX:SurvivorRatio=8 --新生代内存区域中Eden和Survivor的比例
Java7:
Java8:
JDK1.8之后将最初的永久代取消了,由元空间取代。
元空间与永久代最大的区别在于:
永久代使用的JVM的堆内存,但是Java8以后的元空间并不在虚拟机中而是使用本机物理内存。
因为,默认情况下,元空间的大小仅受本地内存限制。类的元数据放入native memory,字符串池和类的静态变量放入java堆中,这样可以加载多少类的元数据就不再由MaxPermSize控制,而由系统的实际可用空间来控制。
堆内存调优
package pers.zhang;
public class test {
public static void main(String[] args) {
//返回java虚拟机试图使用的最大内存量
long maxMemory = Runtime.getRuntime().maxMemory();
//返回Java虚拟机中的内存总量
long totalMemory = Runtime.getRuntime().totalMemory();
System.out.println("MAX_MEMORY=" + maxMemory + "(字节。)" + (maxMemory / (double)1024 / 1024 + "MB"));
System.out.println("TOTAL_MEMORY=" + totalMemory + "(字节。)" + (maxMemory / (double)1024 / 1024 + "MB"));
}
}
发现默认的情况下分配的内存是总内存的『1/4』、而初始化的内存为『1/64』
java7输出:
java8输出:
OOM异常
来源:CSDN
作者:吴声子夜歌
链接:https://blog.csdn.net/cold___play/article/details/104077023