Java面试-每日十题

目录

1.新生代

2.新生代工作过程

3.老年代

4.老年代工作过程

5.老年代中的MajorGC工作原理

6.永久代

7.引用计数法

8.引用计数法中的循环引用问题

9.可达性分析

10.可达性分析原理


1.新生代

1.Java堆从GC的角度分为:新生代、老年代、永久代

2.作用:用来存放新生的对象,一般占据堆的三分之一空间;由于频繁创建对象,导致新生代频繁垃圾回收。

3.新生代分为Eden区、SurvivorFrom区、SurvivorTo区

        Eden:Java新对象的出生地,当Eden区内存不够时会触发GC,对新生代区进行垃圾回收

        ServivorFrom:上一次GC的幸存者,这一次GC的被扫描者

        ServivorTo:保留了一次MinorGC过程中的幸存者

2.新生代工作过程

        GC开始时,对象只存在于Eden区、ServivorFrom区,ServivorTo区为空;经过一次MinorGC扫描后,Eden区、ServivorFrom区存活对象会移动到ServivorTo区,然后清空Eden区、ServivorFrom区,并对存活对象年龄+1,若对象年龄到15就直接分配到老年代中。MinorGC完成后,ServivorFrom区,ServivorTo区功能互换,即一开始ServivorFrom区为空,将Eden区、ServivorTo区扫描后存活对象存入ServivorFrom区,并将年龄+1;

3.老年代

1.作用:主要存放应用程序中的生命周期长的内存中。

2.特点:老年代对象比较稳定,所有MajorGC不会频繁执行。

4.老年代工作过程

        老年代中的MajorGC不会频繁执行,一般会先执行一次MinorGC,使得新生代的对象分配到老年代,使得空间不够用才触发,当无法找到足够大的连续空间分配给新的对象时会触发MajorGC进行垃圾回收。

5.老年代中的MajorGC工作原理

        MajorGC会先扫描所有老年代,标记存活对象,然后回收未标记的对象,MajorGC会产生内存碎片。当老年代满了无法再装下对象,就会抛出Out of Memory异常

6.永久代

定义:内存中的永久保存区域

作用:主要存放Class和Meta(元数据)的信息。Class被加载时被放入永久区域。

缺点:由于GC不会在主程序运行区间对永久区域清理,容易导致永久代区域随着Class加载的增多而变满,最终抛出Out of Memory异常

7.引用计数法

作用:通过引用计数来判断一个对象是否可以回收

方法原理:由于要操作一个对象,必须使用引用进行。若一个对象没有任何相关的引用,说明该对象不太可能在被用到,则就是一个可回收对象

8.引用计数法中的循环引用问题

定义:循环引用指两个或多个对象之间相互引用,形成一个环状结构。

存在问题:每个对象的引用计数都不为0,因此无法被回收,会出现内存泄漏情况的发生,造成程序崩溃,性能下降。

9.可达性分析

作用:解决引用计数法的循环引用问题

原理:通过一系列GC roots对象作为起点搜索,若GC roots和一个对象之间没有可达路径,则该对象不可达。不可达对象经过两次标记过程后仍然是可回收对象,则将被回收

10.可达性原理

        将一系列GC roots对象作为起始节点,从这些结点开始,通过引用关系向下搜寻,搜寻中走过的路径称为引用链;若某个对象与一系列GC roots对象之间没有任何引用链相邻,则说明不可达。

你可能感兴趣的:(java,面试,jvm)