目录
- 一、堆的核心概述
- 2、内存细分
- 二、设置堆内存大小与OOM
- 1、设置堆内存大小
- 2、OOM的说明
- 三、年轻代与老年代
- 2、如何查看一个程序新生代和老年代的比例
- 四、图解对象分配过程
- 1、图解对象分配过程
- 2、对象分配特殊情况
- 3、常用优化工具概述与 Jprofiler的演示
- 五、Minor GC、Major GC、Full GC
- 1、Minor GC、Major GC、Full GC的概念
- 2、Minor GC、Major GC、Full GC的触发机制
- 六、堆空间分代思想
- 七、内存分配策略
- 八、对象分配内存 TLAB
- 九、小结堆空间的参数设置
- 十、堆是分配对象的唯一选择吗
一、堆的核心概述
2、内存细分
现代垃圾收集器大部分都基于分代收集理论设计,堆空间细分为:
JDK7
JDK8
二、设置堆内存大小与OOM
1、设置堆内存大小
2、OOM的说明
OutOfMemoryError : 当堆中的内存超过指定的最大内存时,将会抛出OOM异常
三、年轻代与老年代
/**
* -Xms600m -Xmx600m -XX:NewRatio=4
*
* -XX:NewRatio : 设置新生代与老年代的比例。默认值是2.
* -XX:SurvivorRatio :设置新生代中Eden区与Survivor区的比例。默认值是8
* -XX:-UseAdaptiveSizePolicy :关闭自适应的内存分配策略 (暂时用不到)
* -Xmn:设置新生代的空间的大小。 (一般不设置)
*
* @author shkstart shkstart@126.com
* @create 2020 17:23
*/
public class EdenSurvivorTest {
public static void main(String[] args) {
System.out.println("我只是来打个酱油~");
try {
Thread.sleep(1000000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
配置JVM参数-Xms600m -Xmx600m -XX:NewRatio=4,查看堆内存情况
2、如何查看一个程序新生代和老年代的比例
jps
jinfo -flag NewRatio 13988
四、图解对象分配过程
1、图解对象分配过程
首先明白一个事情: 幸存者0区和幸存者1区也称为from区和to区(一般幸存者0区和幸存者1区空的那一个为to区),当Edon中的内存满了的时候,便会发生 Young GC,将没有垃圾回收的对象放到to区
2、对象分配特殊情况
当Young GC后,Edon还是不够超大对象分配内存,此时就会将在老年代分配内存
3、常用优化工具概述与 Jprofiler的演示
常用优化工具
Jprofiler的使用
五、Minor GC、Major GC、Full GC
1、Minor GC、Major GC、Full GC的概念
2、Minor GC、Major GC、Full GC的触发机制
-
Young GC(Minor GC)触发机制
-
Full GC(Major GC)的触发机制
-
Full GC的触发
六、堆空间分代思想
七、内存分配策略
对象提升规则