扫码关注微信公众号
回复“面试手册”,获取本站PDF版
回复“简历”,获取高质量简历模板
回复“加群”,加入程序员交流群
回复“电子书”,获取程序员类电子书
内存泄漏:指程序中动态分配给内存一些临时对象,并且这些对象始终没有被回收,一直占用着内存,简单来说就是申请内存使用完了不进行释放
常见的内存泄漏产生原因:
- 静态集合类引起内存泄漏,因为静态集合的生命周期和JVM一致,所以静态集合引用的对象不能被释放
- 单例模式导致内存泄漏,因为单例模式的静态特性,它的生命周期和JVM的生命周期一致,如果单例对象持有外部对象的引用,这个对象也不会被回收
- 内部类的对象被长期持有,那么内部类对象所属的外部类对象也不能被收回
- 数据库连接、网络连接等各种连接没有显示释放导致内存泄漏,例如在数据库连接后不再使用时,必须调用close方法释放与数据库的连接,否则会造成大量对象无法被回收进而造成内存泄漏
- 改变哈希值,例如在一个对象存储到HashSet后,改变了对象中参与计算哈希值的字段,那么会导致对象的哈希值发生变化,和之前存入HashSet的哈希值不同,也就无法通过当前对象的引用在HashSet中找到这个对象,无法从HashSet中删除对象,造成内存泄漏,这也是为什么通常利用String类型的变量当作HashMap的key,因为String类型是不可变的
内存泄漏解决方案:写代码时尽量避免上述会造成内存泄漏的情况
内存溢出:指程序运行过程中无法申请到足够的内存导致的错误
常见的造成内存溢出的原因:
- 内存加载的数据量太大,内存不够用了
- 代码中存在死循环或循环产生大量对象
- 启动参数内存值设置过小
- 长期的内存泄漏也会导致内存溢出
内存溢出解决方案:
- 修改JVM启动参数,增加内存
- 使用内存查看工具动态查看内存使用情况
- 对代码进行排查,重点排查有没有上述提到的造成常见内存溢出情景的代码
本站链接:https://www.mianshi.online,如需勘误或投稿,请联系微信:lurenzhang888
点击面试手册,获取本站面试手册PDF完整版