内存溢出
1、优化代码(减少无效的对象频繁创建、手动释放对象引用避免长时间存活等方式);
2、根据项目内存需求,适当调整JVM的堆内存大小(设置合理的最大堆内存、初始堆内存);
3、根据业务场景,使用适当的垃圾收集器、使用适当的GC参数;
4、合理使用数据库连接池、线程池等方式控制频繁创建连接的内存开销,以及线程的数量过多可能会导致系统资源耗尽;
5、使用微服务、分布式架构,将业务数据分散存储,减少单一服务器压力;
6、使用 Redis 或 Memcached 等缓存服务器来缓存经常访问的数据,避免频繁连接数据库的内存开销;
内存泄漏
1、使用内存分析工具来检测内存泄漏,定位问题代码,及时修复。
2、注意及时释放不再使用的资源(关闭数据库连接、网络连接、文件流等,将关闭操作放在finally代码块中,避免因程序异常导致的连接无法正常关闭);
3、避免使用finalizer和cleaner(使用不当可能出现很多不确定问题);
4、注意频繁创建的对象,当对象不在使用时需要及时有效的释放;
5、合理使用弱引用和软引用等方式,当对象不在使用时清除这些对象;
6、使用缓存时,要注意缓存的生命周期和容量(合理设置过期时间、最大容量限制);