08_堆学习

目录

    • 一、堆的核心概述
      • 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
    • 九、小结堆空间的参数设置
    • 十、堆是分配对象的唯一选择吗

一、堆的核心概述

08_堆学习_第1张图片
08_堆学习_第2张图片08_堆学习_第3张图片

2、内存细分

现代垃圾收集器大部分都基于分代收集理论设计,堆空间细分为:
08_堆学习_第4张图片
JDK7
08_堆学习_第5张图片

JDK8
08_堆学习_第6张图片

二、设置堆内存大小与OOM

1、设置堆内存大小

08_堆学习_第7张图片

2、OOM的说明

OutOfMemoryError : 当堆中的内存超过指定的最大内存时,将会抛出OOM异常
08_堆学习_第8张图片

三、年轻代与老年代

/**
 * -Xms600m -Xmx600m -XX:NewRatio=4
 *
 * -XX:NewRatio : 设置新生代与老年代的比例。默认值是2.
 * -XX:SurvivorRatio :设置新生代中Eden区与Survivor区的比例。默认值是8
 * -XX:-UseAdaptiveSizePolicy :关闭自适应的内存分配策略  (暂时用不到)
 * -Xmn:设置新生代的空间的大小。 (一般不设置)
 *
 * @author shkstart  [email protected]
 * @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,查看堆内存情况
08_堆学习_第9张图片

2、如何查看一个程序新生代和老年代的比例

jps
jinfo -flag NewRatio 13988

08_堆学习_第10张图片

四、图解对象分配过程

1、图解对象分配过程

首先明白一个事情: 幸存者0区和幸存者1区也称为from区和to区(一般幸存者0区和幸存者1区空的那一个为to区),当Edon中的内存满了的时候,便会发生 Young GC,将没有垃圾回收的对象放到to区

2、对象分配特殊情况

当Young GC后,Edon还是不够超大对象分配内存,此时就会将在老年代分配内存
08_堆学习_第11张图片

3、常用优化工具概述与 Jprofiler的演示

常用优化工具
08_堆学习_第12张图片

Jprofiler的使用

五、Minor GC、Major GC、Full GC

1、Minor GC、Major GC、Full GC的概念

08_堆学习_第13张图片

2、Minor GC、Major GC、Full GC的触发机制

  • Young GC(Minor GC)触发机制
    08_堆学习_第14张图片

  • Full GC(Major GC)的触发机制
    08_堆学习_第15张图片

  • Full GC的触发
    08_堆学习_第16张图片

六、堆空间分代思想

08_堆学习_第17张图片08_堆学习_第18张图片

七、内存分配策略

对象提升规则
08_堆学习_第19张图片

08_堆学习_第20张图片

八、对象分配内存 TLAB

九、小结堆空间的参数设置

十、堆是分配对象的唯一选择吗

你可能感兴趣的:(#,Jvm,jvm)