只写JVM 答案仅供参考···
2、介绍一下垃圾回收机制
垃圾回收机制是由Java虚拟机提供的,用于在空闲时间以不定时的方式动态回收不被引用的对象占用的内存空间。
3.Java运行的内存分布
4.
1.创建对象的时候,对象需要有内存空间,也是需要为这个对象进行内存空间的申请
2首先判断伊甸园区(Eden)是否有内存空间,如果有就将对象保存到伊甸园区
3 如果空间不足,则自动执行Minor GC(从年轻代回收内存),将Eden区不活跃的对象清理,清理之后继续判断内存是否充足,若充足则分配内存
4 如果执行过后,Eden区仍然内存不足,那就进行存活区判断,如果存货区有内存空间,则将Eden取的部分活跃对象保存到存活区,随后继续判断Eden区内存空间是否充足,如果进行内存分配
5 如果存活期没有内存空间了,当OLD区空间足够时,Survivor区的对象会被移到Old区,否则会被保留在Survivor区
6 当old区空间不够时,这个时候会产生Major GC(Full GC)
7 完全垃圾收集后,若Survivor及old区仍然无法存放从Eden复制过来的部分对象,导致JVM无法在Eden区为新对象创建内存区域,则出现"Out of memory错误";
第五题:
大多数情况下,内存直接在 Eden 区中进行分配。如果 Eden区域没有足够的空间,那么就会发起一次 Minor GC;也是如果老年代没有足够空间的话,那么就会进行一次 Full GC。
Ps:上面所说的只是一般情况下,实际上,需要考虑一个空间分配担保的问题:
在发生Minor GC之前,虚拟机会先检查老年代最大可用的连续空间是否大于新生代所有对象的总空间。如果大于则进行Minor GC,如果小于则看HandlePromotionFailure设置是否允许担保失败(不允许则直接Full GC)。如果允许,那么会继续检查老年代最大可用的连续空间是否大于历次晋升到老年代对象的平均大小,如果大于则尝试Minor GC(如果尝试失败也会触发Full GC),如果小于则进行Full GC。
第六题:
·
第七题:
新生代包括一个Eden区和两个survivor区域(默认的Eden:Survivor = 8:1),主要存放新建的对象,区域一般较小,jvm垃圾回收效率高,主要采用复制算法。
老年代则是存放那些在程序中经历了好几次回收仍然还活着或者特别大的对象(这个大就要看你是否设置了-XX:PretenureSizeThreshold 参数了)。老年代采用的是标记-清除或者标记-整理算法
第八题:
https://blog.csdn.net/xdzhouxin/article/details/81218578
1如果存活期没有内存空间了,当OLD区空间足够时,Survivor区的对象会被移到Old区,
2 对象在Survivor每熬过一次Minor GC,年龄就加1,当年龄达到一定的程度(默认为15)时,就会被晋升到老年代中了
3.如果在Surviver区中,相同年龄的对象所占的总空间大于Surviver区的一半了,那么Surviver区中所有大于这个年龄的对象都会被移入老生代
4.大对象直接进入老生带(这个应该不是从新生代进入老生代·····)