1.什么是Full GC?
对新生代、老年代、永久代都进行GC,即Full GC。可以通过-XX:ScanengeBeforeFullGC来禁止Full GC时对新生代进行GC。
2.Full GC触发条件
①System.gc();可以使用-XX:_DisableExplicitGC禁止
②老年代空间不足(新生代对象转入、创建大对象、大数组)Full GC后仍然不足报OutOfMemoryError: Java heap space。
③永久代空间满(加载类、反射类、调用方法较多),Full GC后仍然不足报OutOfMemoryError: PermGen space。
④CMS GC时出现promotion failed(Young GC时From/To放不下,旧生代也放不下)和concurret mode failure(CMS GC同时有对象要放入旧生代,但空间不足)
⑤统计Young GC时要移到旧生代的对象大小,大于旧生代剩余空间
⑥RMI会1小时执行一次Full GC,可以用-Java -Dsun.rmi.dgc.client.gcInterval=3600000来设置间隔(可以使用-XX:_DisableExplicitGC禁止RMI调用System.gc())
总之,引起Full GC的原因是new了很多对象,没有及时在主动释放掉,导致Eden内存不够用,因此需要不断把对象往老年代迁移导致老年代空间被占满了,因此必须Full GC。
3.如何预防Full GC:
①在缓存命中率不高的情况下,不使用缓存
②在不适用缓存的情况下,内存太小,或者设置参数有问题会引起Full GC。
相关推荐
垃圾回收是JVM自动管理内存的关键机制之一,主要包括以下几种算法: - **引用计数算法**:通过维护对象的引用计数来判断对象是否可达。由于存在循环引用问题,JVM并未采用此算法。 - **可达性分析算法**:从一组根...
在面试中,JVM相关的知识通常包括内存模型、垃圾回收机制、类加载过程以及各种工具的使用。以下是对这些知识点的详细解释: 1. **内存模型及分区**: - **方法区(Method Area)**:存储类信息、常量池(包括...
- **复制算法**:用于新生代的垃圾回收,如Young GC。它将内存分为大小相等的两块,每次只使用其中的一块,当这一块用完后,就将还存活着的对象复制到另一块上面,然后再把已使用过的内存空间一次清理掉。 - **...
- **可达性分析法**:通过GC Roots对象追踪内存中的可达对象,不可达对象被视为可回收。 5. **SafePoint**:GC执行时,JVM会让所有线程暂停到特定的SafePoint位置,以确保GC能正确进行。 6. **GC收集方法**: - ...
- 内存管理:了解栈与堆内存的区别,以及垃圾回收机制。 2. **集合框架** - List、Set、Map接口及其实现类的特性与用法,如ArrayList、LinkedList、HashSet、HashMap等。 - 集合操作:迭代器、泛型、并发集合...
- 引用链法(可达性分析):通过GC Roots追踪引用,无法达到的视为可回收。 5. **SafePoint**:程序执行时的特定位置,允许GC暂停执行。 6. **垃圾收集算法**: - **标记-清除**:标记所有活对象,然后清除剩余...
- 引用链法(可达性分析):通过GC Roots(如静态变量、系统栈中的本地变量等)追踪对象引用,不可达的对象视为可回收。 5. **SafePoint**:GC执行时,需要等待所有线程到达安全点,如循环结束、方法调用等,以...
- **堆(Heap)**:对象实例分配的区域,进行垃圾回收的主要区域。 - **虚拟机栈(Virtual Machine Stack)**:每个线程都有一个独立的栈,用于存储方法调用的状态。 - **本地方法栈(Native Method Stack)**:支持JNI...
- 垃圾回收:GC的基本原理,如新生代、老年代、Minor GC和Full GC的区别。 - 调优:JVM参数调整,如-Xms, -Xmx, -XX:NewRatio等。 2. **多线程与并发**: - 线程状态:新建、就绪、运行、阻塞和死亡。 - 同步...
#### 新生代垃圾回收器和老年代垃圾回收器 新生代垃圾回收器包括Serial、Parallel Scavenge和ParNew,主要采用复制算法。老年代垃圾回收器包括Serial Old、Parallel Old和CMS,主要采用标记-整理或标记-清除算法。...
3. **内存模型与垃圾回收**:深入理解JVM内存结构(堆、栈、方法区、本地方法栈等),GC算法(如Minor GC、Major GC、Full GC)、内存溢出与内存泄漏问题。 4. **多线程与并发**:线程的创建方式、状态转换、同步...
3. **垃圾回收机制**:理解Java内存模型,包括堆内存、栈内存、方法区等,以及GC的工作原理,如新生代、老年代、Full GC等,对于优化程序性能至关重要。 4. **JVM调优**:面试可能会涉及JVM参数配置,如堆大小调整...
讨论垃圾回收机制(GC),如新生代、老年代、Minor GC和Full GC,以及如何调优。 4. **集合框架**:熟练掌握ArrayList、LinkedList、HashMap、HashSet、TreeMap等数据结构的实现原理和使用场景。理解并发容器如...