课件资料
链接:https://pan.baidu.com/s/1pghXO4-Dx7QebUAXD258aA
提取码:ao05

Class初始化过程

image.png

  1. public class T{
  2. public static int count = 2;
  3. public static T t = new T();
  4. public T(){
  5. count++;
  6. }
  7. }
  8. public class T_1 {
  9. public static T_1 t = new T_1();
  10. public static int count = 2;
  11. public T_1(){
  12. count++;
  13. }
  14. }
  15. public class ClassLoad {
  16. // 按顺序准备属性默认值
  17. public static void main(String[] args) {
  18. System.out.println(T.count); // 0, 2, 3
  19. System.out.println(T_1.count); // 0, 1, 2
  20. }
  21. }

预备知识

对象内存划分

image.png

  • 新生代

    Eden :新new的对象
    Survivor:Eden对象回收后把剩余的复制到S1,下次回收S1,将S1剩余的复制到S2,回收S2,剩余复制到S1…

  • 老年代

    Tenured:超过单个region的50%的大对象,S1、S2反复不回收达到指定次数

G1垃圾回收

  • what
    1. 内存分区(Region)管理,内存区域不固定是年轻代或老年代
    2. 新老年代比例:5%-60%,一般不用手工指定
  • why

    image.png

  • when

GC何时触发

  1. YGC
  2. FGC

image.png

  1. MixedGC

    1. MixedGC回收步骤

    image.png

穿插知识点

单例模式

Volatile 线程间可见,禁止指令重排序