内存泄漏是什么?
提前知识:
Java内存管理,只有知道java是如何管理内存的,才能了解什么是 Java 的内存泄漏。
Java的内存管理就是对象的分配和释放问题。在Java中,内存的分配是由程序完成的,内存的释放是由GC完成的。
我们写程序不需要用函数释放内存。不需要管这些。
1. 原因:
主要原因就是,之前申请了内存空间但是忘记释放。如果程序中存在无用对象的引用。那么这些对象就会驻留内存,消耗内存。因为无法让GC验证这些对象是否不再需要。
Java中,内存泄漏就是存在一些被分配的对象。
就是,1.对象是有被引用的,在有向树形图中,存在树枝可以与其相连,2.是无用的,程序以后不会再使用这些对象。如果对象满足这两个条件,那么这些对象可以判定为Java中的内存泄漏。这些对象不会被GC所回收,然而它会占用内存。
2.典型的内存泄漏
1.全局集合。
2.缓存,
3.类装载器
3.如何处理
1.检查数据库查询中,是否有一次获得全部数据的查询,如果一次取10W条数据,可能就会内存溢出。尽量使用分页方式查询。
2. 检查代码中是否由死循环或递归调用。
3. 是否由大循环重复产生新对象实体。
4.检查Map list等集合对象是否有使用完未清除的问题。