Java内存泄漏、内存溢出
参考链接
一、内存泄漏
1.1 定义
- 程序在申请内存后,无法释放已申请的内存空间。
- 一次内存泄露危害可以忽略,但内存泄露堆积后果很严重,无论多少内存,迟早会被占光。内存泄漏堆积的后果就是产生内存溢出。
1.2 内存泄漏的分类
- 常发性内存泄漏
- 发生内存泄漏的代码会被多次执行, 每执行一次, 内存泄漏一块
- 偶发性内存泄漏
- 在某些特定情况下, 可能会发生内存泄漏
- 一次性内存泄漏
- 发生内存泄漏的代码只会被执行一次
- 或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。
- 比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。
- 隐式内存泄漏
- 程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。
- 严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。
- 但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。 所以,我们称这类内存泄漏为隐式内存泄漏。
1.3 可能产生内存泄漏的情况
-
静态集合类
像Set、HashMap、Vector等的使用最容易出现内存泄露,这些静态变量的生命周期和应用程序一致,他们所引用的所有的对象Object也不能被释放,因为他们也将一直被Vector等引用着。class 内存泄露{ static Vector v = new

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

被折叠的 条评论
为什么被折叠?



