1. static String str0="0123456789";
    2. static String str1="0123456789";
    3. String str2=str1.substring(5);
    4. String str3=new String(str2);
    5. String str4=new String(str3.toCharArray());
    6. str0=null;
    7. 假定str0,...,str4后序代码都是只读引用。
    8. Java 7中,以上述代码为基础,在发生过一次FullGC后,上述代码在Heap空间(不包括PermGen)保留的字符数为(C
    9. 5
    10. 10
    11. 15
    12. 20

    圾回收机制的题目。垃圾回收主要针对的是堆区的回收,因为栈区的内存是随着线程而释放的。堆区分为三个区:年轻代(Young Generation)、年老代(Old Generation)、永久代(Permanent Generation,也就是方法区)。
    年轻代:对象被创建时(new)的对象通常被放在Young(除了一些占据内存比较大的对象),经过一定的Minor GC(针对年轻代的内存回收)还活着的对象会被移动到年老代(一些具体的移动细节省略)。
    年老代:就是上述年轻代移动过来的和一些比较大的对象。Minor GC(FullGC)是针对年老代的回收
    永久代:存储的是final常量,static变量,常量池。
    str3,str4都是直接new的对象,而substring的源代码其实也是new一个string对象返回,如下图:
    经过fullgc之后,年老区的内存回收,则年轻区的占了15个,不算PermGen。所以答案选C