内存泄漏和内存溢出的区别
内存溢出 out of memory:是指程序在申请内存时,没有足够的内存空间供其使用,出现out of memory;比如申请了一个integer,但给它存了long才能存下的数,那就是内存溢出。
内存泄露 memory leak,是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。
memory leak会最终会导致out of memory.
内存溢出就是你要求分配的内存超出了系统能给你的,系统不能满足需求,于是产生溢出。
可能频繁创建了大对象或者eden (伊甸)区设置过小 (大对象直接分配在老年代中,导致老年代空间不足—>从而频繁 gc)
可能老年代的空间设置过小了(Minor GC 几个对象就大于老年代的剩余空间了)
2.1. 如果一次 full GC 后,剩余对象不多,那么说明 Eden 的空间设置太小,导致大量短生命周期的对象被分配到了老生代。
2.2 如果一次 full GC 后,老生代的变化不大,那么是老年代分配空间太小了。