内存泄漏、溢出

本文探讨了内存泄漏和内存溢出的概念,并列举了几个可能导致这些问题的编程实践,包括数据库查询不当、死循环、未释放资源等。文章还提供了一些避免这些问题的方法。

1、内存泄漏memory leak :是指程序在申请内存后,无法释放已申请的内存空间,一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。 
2、内存溢出 out of memory :指程序申请内存时,没有足够的内存供申请者使用,此时就会报错OOM,即所谓的内存溢出。 

重点排查:

1.检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。

2.检查代码中是否有死循环或递归调用。

3.检查是否有大循环重复产生新对象实体。

4.检查对数据库查询中,是否有一次获得全部数据的查询。一般来说,如果一次取十万条记录到内存,就可能引起内存溢出。这个问题比较隐蔽,在上线前,数据库中数据较少,不容易出问题,上线后,数据库中数据多了,一次查询就有可能引起内存溢出。因此对于数据库查询尽量采用分页的方式查询。

5.检查List、MAP等集合对象是否有使用完后,未清除的问题。List、MAP等集合对象会始终存有对对象的引用,使得这些对象不能被GC回收。

Java内存泄漏和内存溢出是两个不同的问题。内存泄漏是指程序在申请内存后,无法释放已申请的内存空间,导致内存不断被占用,最终导致内存耗尽。而内存溢出是指程序在申请内存时,没有足够的内存空间供其使用,导致无法分配所需的内存空间。 Java内存泄漏通常是由于程序中存在未释放的对象引用导致的。比如一个对象占用了一定的内存空间,但是在使用完后没有及时释放,导致这部分内存无法被回收。如果这种内存泄漏发生多次,最终会导致内存耗尽。 Java内存溢出则是由于程序需要申请的内存超过了JVM可用的内存空间。当程序申请的内存超过了JVM可用的内存空间时,就会发生内存溢出的问题。这通常是由于程序中创建了过多的对象或者申请了过大的内存空间导致的。 总结来说,Java内存泄漏是指程序无法释放已申请的内存空间,导致内存不断被占用,而内存溢出是指程序需要申请的内存超过了JVM可用的内存空间。 #### 引用[.reference_title] - *1* *2* [JAVA的内存溢出内存泄漏](https://blog.youkuaiyun.com/weixin_39555954/article/details/126689450)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Java基础恶补——内存泄露、内存溢出](https://blog.youkuaiyun.com/wisgood/article/details/16818243)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值