如何分析和定位Java堆外内存泄漏?
最后,持有次数限制TT和最大持有次数限制MTT是对象晋升策略的关键参数。TT决定了对象在Survivor区存活多久后会被移动到老年代。如果MTT设置不当,可能导致大量短命对象过早进入老年代,增加Full GC的频率。结合上述所有指标,综合判断JVM的内存健康状态,才能有效定位堆外内存泄漏的根本原因。
最后,持有次数限制TT和最大持有次数限制MTT是对象晋升策略的关键参数。TT决定了对象在Survivor区存活多久后会被移动到老年代。如果MTT设置不当,可能导致大量短命对象过早进入老年代,增加Full GC的频率。结合上述所有指标,综合判断JVM的内存健康状态,才能有效定位堆外内存泄漏的根本原因。
其实堆外内存(Off-Heap)和堆内(On-Heap)是两码事,TT和MTT是GC针对堆内对象晋升的策略参数。用堆内GC指标去定位堆外内存泄漏,逻辑上就不对等。堆外泄漏通常要查DirectByteBuffer的清理引用、NIO的Buffer池、或者native层的malloc/free是否成对出现。建议重点排查Netty的ByteBuf或者自定义的DirectMemory分配器,而不是盯着Survivor区看。