JVM内存是有限的,JVM中有个内存分代
堆内存:年轻代+老年代,统称为堆,可设置大小
年轻代分为三块:年轻代、S1区、S2区(survivor区)
默认情况下,新生代:S1:S2比例是8:1:1
假设年轻代2个G,那么实际上分为1.6G/0.2G/0.2G
新生代/年轻代(Eden区)1.6G |
|
S1区 0.2G |
S2区 0.2G |
2G老年代
对象一开始是放在年轻代中,如果eden区满了,会出YGC,处理没有引用的对象
两种对象不能回收:
(1)正在执行的方法中引用的对象,不能回收(有对象的局部方法引用的)
(2)存活的对象内部引用的静态变量对象,不能回收(被类的静态变量引用的)
其他对象基本上都可以进行回收
【评论区】
1、问题:为什么2个string+然后intern就会返回true,一个string然后intern就会返回false?
String str2 &