Java内存泄漏、内存溢出

本文详细探讨了Java中的内存泄漏和内存溢出,包括定义、分类、原因及解决方案。内存泄漏可能导致内存资源逐渐耗尽,而内存溢出则是因为程序请求的内存超过了系统可分配的额度。二者紧密相关,内存泄漏积累可引发内存溢出。解决办法包括调整JVM参数、优化代码以及使用内存查看工具进行监控。

参考链接

  1. JAVA内存泄漏和内存溢出的区别和联系
  2. Java内存泄漏和内存溢出
  3. JAVA中内存泄漏,内存溢出,栈溢出

一、内存泄漏

1.1 定义

  • 程序在申请内存后,无法释放已申请的内存空间
  • 一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。内存泄漏堆积的后果就是产生内存溢出

1.2 内存泄漏的分类

  • 常发性内存泄漏
    • 发生内存泄漏的代码会被多次执行, 每执行一次, 内存泄漏一块
  • 偶发性内存泄漏
    • 在某些特定情况下, 可能会发生内存泄漏
  • 一次性内存泄漏
    • 发生内存泄漏的代码只会被执行一次
    • 或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。
    • 比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。
  • 隐式内存泄漏
    • 程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。
    • 严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。
    • 但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。 所以,我们称这类内存泄漏为隐式内存泄漏。

1.3 可能产生内存泄漏的情况

  • 静态集合类
    像Set、HashMap、Vector等的使用最容易出现内存泄露,这些静态变量的生命周期和应用程序一致,他们所引用的所有的对象Object也不能被释放,因为他们也将一直被Vector等引用着。

    class 内存泄露{
         
         
        static Vector v = new 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值