-
什么时候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修饰的变量赋值和执行静态语句的过程;初始化一个类时,如果他的父类还没初始化,那先初始化他的父类;
-
-
双亲委派模型的好处
-
因为类的比较需要在同一个类加载器加载的前提下才有意义,如果不使用双亲委派模型,那么同一个类可能被不同的类加载器加载,那么类之间的比较结果也就失去了意义;
-