什么是内存泄漏,为什么会导致内存溢出?

工作一段时间后,会经常听到内存溢出,那内存溢出到底是哪里的内存溢出,是什么原因导致的,如何解决,今天就来深入了解一下.

在java中,要了解内存,需要先清楚jvm内存模型,我们常说的java内存实际上就是指Runtime Data Area,分为虚拟机栈、堆、方法区、程序计数器、本地方法栈五个部分.这里不做具体介绍.

1.常见的内存泄露

(1)内存分配未成功,却使用了它
(2)内存分配成功,但尚未初始化就引用它
(3)内存分配成功且初始化,但操作越过了内存的边界
(4)忘记释放内存,造成内存泄漏
(5)释放了内存却继续使用它
以发生的方式来分类:
(1)常发性内存泄漏,发生内存泄漏的代码会被多次执行到,每次执行都会导致一块内存泄漏
(2)偶发性内存泄漏
(3)一次性内存泄漏,发送泄漏的代码只会被执行一次
(4)隐式内存泄漏,程序在运行过程中不停地分配内存,但直到结束时才释放内存。

2.为什么会导致内存溢出

编写java程序最为方便的地方就是我们不需要管理内存的分配和释放,一切由jvm来进行处理,当java对象不再被应用时,等到堆内存不够用时,jvm会进行垃圾回收,清除这些对象占用的堆内存空间,如果对象一直被应用,jvm无法对其进行回收,创建新的对象时,无法从Heap中获取足够的内存分配给对象,这时候就会导致内存溢出。而出现内存泄露的地方,一般是不断的往容器中存放对象,而容器没有相应的大小限制或清除机制。容易导致内存溢出。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值