1.堆的核心概述
2.设置堆内存大小和OOM
3.年轻代和老年代
4.图解对象分配过程
5.Minor GC、Major GC、Full GC
6.堆空间分代思想
7.内存分配策略
8.为对象分配内存:TLAB
9.小结:堆空间的参数设置
10.堆是分配对象的唯一选择吗
-Xms10m -Xmx10m -XX:+PrintGCDetails
-Xms表示堆区的起始内存,等价于 -XX:InitialHeapSize(年轻代+老年代),默认1/64
-Xmx表示堆区的最大内存,等价于 -XX:MaxHeapSize ,默认1/4
一旦堆区中的内存大小超过“-Xmx”,抛出OutOfMemoryError
-Xms = Runtime.getRuntime().totalMemory()/1024/1024
-Xmx = Runtime.getRuntime().maxMemory()/1024/1024
S0 S1标记复制算法
使用jvisualVM抽样器推测OOM的原因
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:/root/logs/***/gc.log
-XX:+PrintTenuringDistribution:用于显示每次Minor GC(年轻代GC)时Survivor区中各个年龄段的对象的大小
# GC日志
# 必备
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-XX:+PrintTenuringDistribution
-XX:+PrintHeapAtGC
-XX:+PrintReferenceGC
-XX:+PrintGCApplicationStoppedTime
# 可选
-XX:+PrintSafepointStatistics
-XX:PrintSafepointStatisticsCount=1
# GC日志输出的文件路径
-Xloggc:/home/ec2-user/dt/gc-%t.log
# 开启日志文件分割
-XX:+UseGCLogFileRotation
# 最多分割几个文件,超过之后从头文件开始写
-XX:NumberOfGCLogFiles=14
# 每个文件上限大小,超过就触发分割
-XX:GCLogFileSize=100M