内存溢出
内存不够用
典型的内存溢出就是Out Of Memory(OOM)
- 由于GC不断发展,所以一般情况下不会发生
OOM
,除非应用程序占用的内存增长速度非常快,造成垃圾回收的速度已经跟不上内存消耗的速度 - 官方对于
OOM
的解释就是没有空闲的内存,并且垃圾回收器也无法提供更多内存
内存溢出原因
堆内存不够一般有两个原因
1. jvm设置的堆的大小不够 : 可通过Xmx,Xms来设置
2. 代码中创建了大量大对象,并且很长时间不能被回收
内存泄漏
内存开始够用,但浪费很多,之后不够用
严格来说,只有对象不会再被程序用到了,但是GC又不能回收他们的情况,才叫内存泄漏
但是: 一般我们说的内存泄漏
都是广义的,就是指有一些用不到的对象占用着虚拟机的内存,一般是指由于自己写代码的时候的一些疏忽,导致一些该回收的对象没有被回收
内存泄漏场景
-
单例模式
单例对象的内部依赖了一个外部的对象,这个外部的对象在一段时间后不被使用了,因此造成很大的浪费,尤其是遇到这个外部的对象非常大的情况
-
一些对象没有进行
close()
操作比如数据库连接开了连接后并没有断开,Socket的连接开了没有断开
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/202562.html