java内部类引发的内存泄露

java内部类引发的内存泄露,要有代码,有例子。发生内存泄露后,如何解决。

java是自动垃圾回收,不会发生传统意义上的内存泄漏。我们说的内存泄漏一般是指在java中无意延长了变量的生存周期,比如局部变量的引用放在了静态成员中。或者说的是java通过jni调用C++代码,而没有正确释放。

楼上已经说得很清楚了,原因就是“Java中内部类(匿名内部类也一样)会有宿主类的强引用”,引发的现象是内部类对象方法的生命周期会关联到外部类对象上,延迟外部类对象的回收。
这个强引用(this$0)是编译出来的,是为了维持内部类语法特性的必要代价,无法干预。
想避免这种现象,需要在外部类对象生命周期结束时手动将内部类对象生命周期结束。
不过,除非延迟回收会成为系统的运维瓶颈(瞬间产生大量对象导致OOM),一般也不需要特别关注,GC机制通常足以应付。

GC机制通常足以应付,java内部类。