重点关注的问题:
- 判断可回收算法
- 回收的算法
- 常见垃圾回收器
Java 内存泄露
参考: https://blog.youkuaiyun.com/anxpp/article/details/51325838
- Java尽管有GC,仍然会内存泄露(OOM error: out of heap space)
- GC中不会被使用对象的就会被回收
- 不会再被使用的对象不能被回收,即内存泄露
常见: 如果长生命周期的对象持有短生命周期的引用,就很可能会出现内存泄露
例如:
- 在只需要局部变量就够的时候使用实例变量,该变量其实被使用完了却只会在类的所有对象被释放时才会释放
- 当一个collection内元素全部为null的时候,collection应当被回收却回收不掉
GC Root Tracing
参考: https://blog.youkuaiyun.com/mine_song/article/details/63251367
- 判断是否可回收算法
- GC Roots Object作为起点,沿着Reference Chain搜索,未被搜索到的就是不可到达对象
- GC管理的主要区域是Java堆,一般情况下只针对堆进行垃圾回收。方法区、栈和本地方法区不被GC所管理,因而选择这些区域内的对象作为GC roots,被GC roots引用的对象不被GC回收,可以作为GC Root 引用点的是:
- Java Stack中的引用的对象。
- 方法区中静态引用指向的对象。
- 方法区中常量引用指向的对象。
- Native方法中JNI引用的对象