CMS,堆外内存,System.gc(),堆外内存

类似netty的directBuffer,在堆外申请一块内存,在堆内有一个相应的reference对象,堆外内存的释放,依赖于堆内reference的清理。一般来说,这类reference都是短生命周期的临时对象,所以,younggc就会清理掉这些reference

但是,负载搞的情况下,这些reference对象可能晋升到old区,导致这些堆外内存不能及时释放。就会导致堆外内存触发System.gc()

System.gc()会直接触发系统的FullGC,导致STW脚长时间,一般是秒级别。

对于OLD区使用CMS的应用,也会触发STW的FullGC。 但是这个参数又不能通过 DIsableExplicitGC关掉,否者会导致OOM direct memory.

如果使用CMS,可以增加 -XX:+ExplicitGCInvokesConcurrent 参数,使System.gc()触发的FullGC为CMS,防止过长的STW时间。

你可能感兴趣的:(CMS,堆外内存,System.gc(),堆外内存)