JVM:

    1. jvm 的位置:运行在操作系统之上
    1. 2. jvm 的体系结构:****
    2. 类加载器,执行引擎
    3. 方法区,堆
    4. 方法栈,本地方法栈,程序计数器
    5. 本地方法接口 本地方法库!
    6. 2.1 类加载器:
    7. 只负责加载class 文件,执行引擎负责执行! jvm 中生成一个类的模板!
    8. 分类:了解
    9. 虚拟机自带的加载器
    10. 启动类加载器(BootstrapC++
    11. 扩展类加载器(ExtensionJava
    12. 应用程序类加载器
    13. AppClassLoaderJava
    14. 也叫系统类加载器,加载当前应用的classpath的所有类
    15. 用户自定义加载器 Java.lang.ClassLoader的子类,用户可以定制类的加载方式
    16. 加载顺序:有下往上
    17. 2.2 执行引擎:Execution Engine执行引擎负责解释命令,提交操作系统执行。
    18. 2.3 Native Interface本地接口、方法
    19. natvie 修饰的! 由执行引擎加载本地方法库! c,c++ 编写的!
    20. 2.4 程序计数器、PC寄存器:
    21. 本质:指针 {向下一条指令的地址}
    22. 2.5 方法区:{共享区间} {非堆}
    23. 内有的东西:字段和方法字节码,以及一些特殊方法如构造函数,接口代码!
    24. 静态变量+常量+类信息(构造方法/接口定义)+运行时常量池存在方法区中
    25. Cart cart = new Cart(); 在堆内存中!
    26. 2.6 栈:
    27. 栈内存:主管Java程序的运行!
    28. 生命周期:跟线程一样!
    29. 栈内存中存储的内容:
    30. 8种基本类型的变量+对象的引用变量+实例方法都是在函数的栈内存中分配。
    31. int a = 9;
    32. Cart cart = new Cart();
    33. 栈运行原理:
    34. 栈中的数据以栈帧{数据,文件}的形式存在! “先进后出”/“后进先出”原则.
    35. StackOverflowError:
    36. 检查代码的业务逻辑!
    37. 3. JVM 三大厂商了解;
    38. 4. 堆:
    39. OutOfMemoryError:指的是堆内存溢出!
    40. 可以通过参数-Xms、-Xmx来调整!
    41. 幸存0区,幸存1区: 称之为:from to 区!需要经过15GC 才会到养老区。 to 总是空的!
    42. 1.7 堆的划分:
    43. 新生区:
    44. 养老区:
    45. 永久区:
    46. 1.8 堆的划分:
    47. 新生区:
    48. 养老区:
    49. 元空间:
    50. 永久区:虚拟机自身的class interface
    51. 1.8 我们将常量池移动到元空间上!

    总结上午:

    1. jvm 体系架构图:
      类加载器 : 执行引擎
      方法区{共享区,非堆}:堆
      方法栈:本地方法栈:程序计数器、PC寄存器:
      本地接口,本地方法库!
    1. 了解:
    2. jvm 的体系架构图中每块的作用:
    3. 2. 堆:
    4. 新生区:
    5. 伊甸区:新创建的对象 Student stu = new Student();
    6. 幸存0 from
    7. 幸存1 to
    8. to 区总是空!
    9. 普通GC: 经过15 幸存者来到养老区!
    10. 养老区:
    11. Full GC
    12. 元空间:
    13. 3. 如何调优!
    14. -Xms1024m -Xmx1024m -XX:+PrintGCDetails
    15. idea 中如何设置获取到内存溢出数据:
    16. -Xms1m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=E:\
    17. HeapDumpOnOutOfMemoryError:导出oom 信息到文件!
    18. 使用:
    19. jvisualvm.exe 解读文档!
    20. 4. GC 讲解:
    21. GC: 分代收集算法
    22. 最频繁:新生区
    23. 次之: 养老区
    24. 基本不动: 元空间,永久区!
    25. GC 4大算法:
    26. a. 引用计数法:
    27. 不好维护:
    28. 很难用
    29. b. 复制算法:
    30. 新生区:
    31. 优点:效率高,没有内存碎片产生
    32. 缺点:需要双倍内存空间
    33. c. 标记清除:
    34. 养老区:
    35. 优点:节省内存空间
    36. 缺点:两次扫描,可能会产生内存碎片!
    37. d. 标记压缩:
    38. 养老区:
    39. 优点:没有产生内存碎片:
    40. 缺点:移动需要时间
    41. 总结:
    42. 新生区:复制算法
    43. 养老区:标记清除-标记压缩
    44. 普通GC 发生在新生区:
    45. Full GC 放生在养老区: