LeakType
内存泄漏实质
内存泄漏实质上是GC时候,被GC Root引用或间接引用着的对象无法被回收,而可以作为GC Root的对象在java中有几种:
虚拟机栈或叫JVM栈(栈帧中的本地变量表)中引用的对象; (线程泄露)
虚拟机栈是线程私有的,每个java方法被执行的时候都会同时创建一个栈帧(Stack Frame)用于存储局部变量表、操作栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出栈的过程。
方法区中的类静态属性引用的对象; (static变量)
方法区存储类信息、常量、静态变量等数据,是线程共享的区域
本地方法栈中JNI(即一般说的Native方法)中引用的对象 (Jni持有的对象)
对应虚拟机栈为虚拟机执行java方法服务,而本地方法栈为虚拟机使用到的Native方法服务
方法区中常量引用的对象; (final修饰的int/float/long等基本数据类型和String) 不常见