美文网首页
Netty ResourceLeakDetector 之 Pha

Netty ResourceLeakDetector 之 Pha

作者: 乐不思孰 | 来源:发表于2018-04-02 19:17 被阅读0次

    参见netty引用计数官方文档:http://netty.io/wiki/reference-counted-objects.html

    Netty中用虚引用检测内存泄漏的基本思路:

    1)对于需要管理资源,创建一个虚引用(PhantomReference),并为其绑定一个引用队列(ReferenceQueue);当虚引用指向的对象被GC时,我们能够在该引用队列中获取到对应的虚引用(可以将其理解为一个GC通知)

    2)Netty中对于池化(Pooled,即netty使用单独的内存池管理)的资源,会基于引用计数(ReferenceCounted)进行单独的管理;池化的资源使用完需要主动释放以回收到内存池中,也就是说,如果一个池化的资源使用正确,那么在其被GC之前,资源肯定已经被释放,即其引用计数为0

    3)为了检测由于忘了释放资源而导致的内存泄漏(也即netty管理的内存池的内存泄漏),netty会在池化的资源创建时按一定比例采样,创建一个DefaultResourceLeak(netty自定义的一个虚引用的子类)并放入ResourceLeakDetector的引用队列中,并在适当时刻检测资源的释放和GC情况

    4)对于因GC而被放入到引用队列中的DefaultResourceLeak,netty会检测其是否已被关闭(即所指向的资源被手动回收了),如果没有被释放(对象已被gc但是内存池中的内存没被释放),则有必要记录一条内存泄漏日志

    相关文章

      网友评论

          本文标题:Netty ResourceLeakDetector 之 Pha

          本文链接:https://www.haomeiwen.com/subject/khgxhftx.html