Java虚拟机知识点

  • 什么时候GC

    • Eden区满的时候进行minor gc;晋升到老年代的对象大小大于老年代剩余空间会进行full gc;进行minor gc时,survivor空间不足,并且老年代剩余空间小于历次晋升老年代的对象平均大小,会进行full gc;

  • 什么对象需要GC

    • 以GC roots作为起点,通过引用链向下搜索,不可到达的对象将会被标记一次,有重写finalize()方法且没执行过finalize方法的对象进入一个队列让他们执行finalize方法,没有在finalize方法中被重新引用的对象跟其他被标记的对象进行第二次标记,这些被标记了两次的对象都是要进行gc 的;

  • 怎么回收

    • 标记-清楚算法;

    • 复制算法;

    • 标记-整理算法;

  • 说一下类加载机制

    • 类加载主要分为三个阶段,分别是加载、连接、初始化;

    • 加载指的是把从各个来源得到的class字节码文件通过类加载器载入内存中在方法区生成class对象;

    • 连接又分为三个部分,分别为验证、准备、解析;验证是为了确保加载进来的class文件符合虚拟机规范,不会出现安全问题,比如class文件的格式是不是虚拟机的规范、类是否继承了不可继承的final类、类有没有实现接口的所有方法;准备是为static变量分配内存并初始化;解析是将符号引用替换为直接引用,符号引用是用符号来描述引用的目标(如java.util.Date、java.util.Date.Date()),直接引用是通过地址来直接定位目标,可以是指向目标的指针、相对偏移量、句柄;

    • 初始化阶段是对static修饰的变量赋值和执行静态语句的过程;初始化一个类时,如果他的父类还没初始化,那先初始化他的父类;

  • 双亲委派模型的好处

    • 因为类的比较需要在同一个类加载器加载的前提下才有意义,如果不使用双亲委派模型,那么同一个类可能被不同的类加载器加载,那么类之间的比较结果也就失去了意义;

 

你可能感兴趣的:(Java)