- 内存泄露、内存溢出(OOM)问题
内存泄露:是指分配的一些对象在使用完毕后一直无法回收,久而久之导致虚拟机无法回收的内存越积越多,虚拟机剩下的内存就越来越少了。解决这个问题的思路一般是借助想 Visual VM、JConsole,或 java 的 jstack、jmap、jstat等观察 java 进程中那些对象、集合占用的内存较大,然后再去审查源码看看这些对象占据的内存空间是否较大,这些对象是否在频繁的申请内存空间;
内存溢出:内存溢出一般指,我们运行的程序确实需要加载那么多的数据,确实需要分配那么多内存空间,但发现加载那么多数据后,内存溢出了(内存不够了),这就是我们所说的内存溢出了,发现内存溢出,也可借用内存分析工具,查看哪些类占用了较大空间,通过审查代码确认这些类是否真的需要加载那么多的数据,若是必须的,那就只有通过调整虚拟机内存空间来解决问题了,一般调整的参数是 -Xmx:[小于系统内存的一个数据],当然还可以设置 -Xms:[可以和最大堆参数一样来避免动态的内存copy,垃圾回收]
高频的申请内存空间(new 对象),却也不歇歇会儿(没有腾出 CPU 来回收垃圾),这样呢,许多垃圾无法回收,新对象又越积越多,结果,无法找到内存空间为 new 的对象了,出现 OOM 了。
- CPU占用极高