JAVA——内存溢出、内存泄漏

目录

内存溢出

内存泄漏


内存溢出

内存溢出指的是在程序执行过程中,申请的内存超过了系统实际可用的内存资源。

内存溢出的常见情况:

  1. 创建大量对象并持有引用:在程序中创建大量对象并持有对这些对象的引用,而没有及时释放这些引用,导致堆内存不断增加,最终导致内存溢出。如集合类中有对对象的引用,使用完后未清空,使得JVM不能回收。
  2. 递归调用导致栈溢出:当递归调用的层级过深时,栈空间无法容纳大量的调用栈帧,导致栈溢出。
  3. 超大数据量处理:当处理超过可用内存容量的大数据集时,例如读取巨大的文件或从数据库中检索大量数据时,可能会导致内存溢出。

内存泄漏

内存泄漏是指不再使用的对象仍然被引用,导致GC无法回收

内存泄漏的常见情况:

  1. 对象的无限制缓存:在使用缓存的时候,如果没有合适的策略来清理缓存并释放不再使用的对象,就会导致内存泄漏。这种情况下,对象持续积累,占用越来越多的内存空间。
  2. 不正确的上下文管理:在某些情况下,需要手动管理资源的释放,例如打开文件、数据库连接或网络连接等。如果没有在适当的时候显式地关闭或释放这些资源,就会造成内存泄漏。
  3. ThreadLocal忘记remove():使用线程池的时候,ThreadLocal 需要在使用完线程中的线程变量手动 remove(),否则会内存泄漏。因为线程执行完后没有销毁而是被线程池回收,导致ThreadLocal中的对象不能被自动垃圾回收。 
  4. 静态容器里的对象:静态集合类的生命周期与 JVM 程序一致,容器里的对象引用也将一直被引用得不到GC;Java里不准静态方法引用非静态方法也是防止内存泄漏。
  5. 单例对象引用的外部对象:单例模式里,如果单例对象如果持有外部对象的引用,因为单例对象不会被回收,那么这个外部对象也不会被回收
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 ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值