堆内存分为新生代和老年代,在1.7以前有永久代,1.8叫元空间,并且从堆内存中去掉,放到了物理内存中。
所以物理上只有新生代和老年代。
新生代分为伊甸园区,和幸存区1(from区)和幸存区2(to区) 大小比列 8:1:1
新生代占堆内存的1/3,老年代占2/3。
堆内存调优
在idea开发工具里配置JVM启动参数
-Xms2048m -Xmx2048m -XX:+PrintGCDetails
给定堆内存大小并且打印GC回收日志
这里的值要设置一样大,延迟第一次GC时间,避免内存忽高忽低,gc争取内存资源,带来一些奇怪的问题。
查看初始内存和最大内存的代码如下:
long maxMemory = Runtime.getRuntime().maxMemory(); long totalMemory = Runtime.getRuntime().totalMemory();