应用运行中,突然报内存泄漏,于是研究了下JVM垃圾回收器内存泄露原因,今天就来聊聊这些
垃圾收集算法(一)
①介绍
②GC的时机
在分代模型的基础上(新生代老年代),GC从时机上分为两种ScavengeGC和FullGC。
ScavengeGC。2.1触发时机:新对象生成时,Eden空间满了。2.2理论上Eden区大多数对象会在ScavengeGC回收,复制算法的执行效率会很高,ScavengeGC时间比较短。
FullGC(服务暂停)。3.1对和整个JVM进行整理,包括Young、Old和Perm。3.2主要的触发时机:old满了、Perm满了、system.gc()。3.3效率很低,尽量减少FullGC。
③垃圾回收器
分代模型:GC的宏观场景。
垃圾回收器:GC的具体实现。
HotspotJVM提供多种垃圾回收器,我们需要根据具体应用的需要采用不同的回收器。
没有万能的垃圾回收器,每种垃圾回收器都有自己的使用场景。
④垃圾收集器的并行和并发
并行:指多个收集器的线程同步工作,但是同步线程处于等待状态。
并发:指收集器在工作的同时,可以允许用户线程工作。
⑤Serial收集器
单线程收集器,收集时会暂停所有工作线程,使用复制收集算法,虚拟机运行在Client模式时的默认新生代收集器。最早的收集器,单线程进行GC。
New和OldGeneration都可以使用。
新生代,采用复制算法,在老年代,采用Mark-