
中国移动 Java 基础专项面试:不只考语法,更考你懂不懂底层。JVM 内存模型、垃圾回收、集合源码、并发容器是高频深挖点。面试官喜欢顺着一道题挖到源码级别,看你是否真理解而非背结论。这一篇把八股落到源码与调优上。Q1:JVM运行时数据区怎么划分?线程私有:程序计数器、虚拟机栈、本地方法栈;线程共享:堆、方法区(元空间)。栈存栈帧(局部变量表/操作数栈),堆存对象实例,方法区存类信息/常量/静态变量。OutOfMemoryError 和 StackOverflowError 分别来自堆和栈的不同溢出场景。理解分区是看懂 GC 和内存问题、以及为什么局部变量不会线程冲突的前提。java -Xms512m -Xmx512m -XX:MaxMetaspaceSize=256m App深度解析:常追问栈溢出场景?无限递归或栈帧过大(超大局部数组)触发 StackOverflowError;堆溢出是对象过多来不及回收触发 OOM。调优第一步就是分清这两种,再决定调堆还是调栈/线程数。Q2:垃圾回收算法与分代收集?基础算法:标记-清除(有碎片)、复制(半区,适合新生代)、标记-整理(适合老年代)。分代:新生代(Eden+2 Survivor,复制算法,朝生夕死)、老年代(标记-整理)、永久代/元空间。触发 Minor/Full GC 的时机与停顿差异是考点,Full GC 停顿长是性能瓶颈常见源,要能解释为什么老年代用整理而非复制。System.gc(); // 仅建议,不保证立即 Full GC深度解析