面试难点梳理 - JVM

视频
100个P的视频,内容重复的一堆,我只能找出这么多感觉有用的,大家自己看的时候注意一下。

随看随记

jvm如何认定两个对象同属于一个类型,必须同时满足下面两个条件:

  • 都是用同名的类完成实例化的。
  • 两个实例各自对应的同名的类的加载器必须是同一个。比如两个相同名字的类,一个是用系统加载器加载的,一个扩展类加载器加载的,两个类生成的对象将被jvm认定为不同类型的对象。

能不能自己写个类叫java.lang.System?

  • 答案:通常不可以,但可以采取另类方法达到这个需求。
  • 解释:为了不让我们写System类,类加载采用委托机制,这样可以保证爸爸们优先,爸爸们能找到的类,儿子就没有机会加载。而System类是Bootstrap加载器加载的,就算自己重写,也总是使用Java系统提供的System,自己写的System类根本没有机会得到加载。
  • 但是,我们可以自己定义一个类加载器来达到这个目的,为了避免双亲委托机制,这个类加载器也必须是特殊的。由于系统自带的三个类加载器都加载特定目录下的类,如果我们自己的类加载器加载一个特殊的目录,那么系统的加载器就无法加载,也就是最终还是由我们自己的加载器加载。

ThreadLocal的内存泄漏问题

  • 每次使用完ThreadLocal都调用它的remove()方法清除数据
  • 将ThreadLocal变量定义成private static,这样就一直存在ThreadLocal的强引用,也就能保证任何时候都能通过ThreadLocal的弱引用访问到Entry的value值,进而清除掉 。

G1什么时候触发FullGC

  1. 从年轻代分区拷贝存活对象时,无法找到可用的空闲分区
  2. 从老年代分区转移存活对象时,无法找到可用的空闲分区
  3. 分配巨型对象时在老年代无法找到足够的连续分区

GC

程序的栈

  • 每个线程对应一个栈,每个栈中都有很多个栈帧,每个方法对应一个栈帧。

在这里插入图片描述

JVM的GC历史

  • 如何判断对象是否是个垃圾
  • (JVM不用,Python使用)引用计数法,通过对被检查的对象的引用进行计数,如果为0,则表示该对象是垃圾。但是这个方法对于循环引用不起作用。
  • 根可达算法,GCroot,通过从变量的根开始向下指向,直到结果,对于已经没有的引用的,被视为垃圾。
  • 可以当作GC根的有:线程栈变量,静态变量,运行时常量池,JNI变量。

在这里插入图片描述

算法

  • 标记清除:标记以后,进行清除,会产生碎片
  • 复制:一分为二,有用的复制到空闲空间。浪费空间
  • 标记整理:标记以后,进行清除,同时向前整理效率低

垃圾回收器

在这里插入图片描述

管理模型

  • 在这里插入图片描述
  • 仅仅在新生代进行的GC成为MinGC,老年代的内存满了会触发FullGC
  • 在这里插入图片描述
  • 分代模型:年轻代,老年代。
  • 分区模型:分成一个一个的小格。

在这里插入图片描述

分代类型垃圾回收器(Stop The World)

  • JDK1.8 默认PS + PO

Serial + Serial Old

  • Serial 用于年轻代,单线程,时停(STW)的拷贝算法。
  • Serial Old 用于老年代,单线程、时停(STW)的使用标记整理算法算法
  • Serial串行回收器(单CPU效率最高,虚拟机是Client模式的默认垃圾回收器)。
  • Stop The World 当进行垃圾回收的时候,会让所有的进程停止,仅仅进行垃圾回收,回收之后,在继续业务。
    在这里插入图片描述

Parallel Scavenge + Parallel Old(多个回收线程并行清理)

  • 和Serial + Serial Old 一样 ,只不过在垃圾回收时采用多线程的形式。

ParNew

    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

    “相关推荐”对你有帮助么?

    • 非常没帮助
    • 没帮助
    • 一般
    • 有帮助
    • 非常有帮助
    提交
    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值