总结...

文章目录

  1. JVM组成:

    • 类加载子系统(加载【系统类加载器–>扩展类—>启动类】、链接【验证+准备(类变量默认赋值)+解析(符号引用变为直接引用)】、初始化【执行<clinit.>类变量和静态代码块的显式赋值】)
    • 运行时数据区
      • 虚拟机栈(每个线程在创建时都会创建一个虚拟机栈,内部存栈帧,对应着一次次的 Java 方法调用)
        • 局部变量表(存了方法中定义的变量,基本数据类型直接存,引用类型存引用指向堆中的实际对象)
        • 操作数栈(用于保存中间结果)
        • 动态链接(符号–>直接引用)
        • 方法返回地址
      • 本地方法栈
      • PC
      • 堆(字符串常量池和静态变量)
        • 年轻代(minorGC)
        • 老年代(MajorGc 和Full GC)
      • 方法区
    • 执行引擎
    • 在这里插入图片描述
  2. 局部变量有什么好处
    在这里插入图片描述

  3. 对象头
    Mark word(GC 、hash值、锁信息 )+类型指针

  4. 字符串常量池

    • 是一个固定大小的 Hashtable
    • 在这里插入图片描述
  5. 怎么判断一个对象能否被回收?
    首先由GCroot经过可达性分析算法看这个对象是否在引用链上,没有的话说明这个对象是垃圾,再看是否重写了finalize()方法,如果在 finalize()方法中与引用链上的任何一个对象建立了联系,那么就不会删除,否则就删除了。

  6. 三种垃圾收集算法

    • 标记–清除算法:先标记,可达对象会在对象头标记一下,然后遍历堆内存,将可达的对象留下来,其他的垃圾清理掉(会产生内存碎片,需要维护空闲链表)
    • 标记–复制算法:先标记,内存分为两部分,将标记的存货对象按序的放入第二部分内存,当前这部分内存全部清理。(内存利用率50%,不会有内存碎片)
    • 标记–压缩算法:先标记,将存活的对象压入内存的一端
    • 年轻代一般用标记复制算法,因为这些对象一般都很短暂,幸存者0区和幸存者1区这样的来回复制开销不会很大,老年代的话一般是标记清除和标记压缩,这个的话就要看是哪个垃圾回收器了。
  7. 强软弱虚引用:
    强引用——不回收,OOM也不回收
    软引用:内存不足才回收
    弱引用:只要发生GC,就回收
    软引用、弱引用都非常适合来保存那些可有可无的缓存数据。当系统内存不足时,这些缓存数据会被回收,不会导致内存溢出。而当内存资源充足时,这些缓存数据又可以存在相当长的时间,从而起到加速系统的作用。
    虚引用:对象回收的跟踪

  8. 垃圾回收器
    在这里插入图片描述
    CMS和G1是两款并发的垃圾回收器,CMS只作用在老年代(标记清除,会有内存碎片),G1年轻代和老年代(分区)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    G1:在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值