堆内存溢出与内存泄漏

一、内存溢出

java堆内存溢出主要有如下原因

1、虚拟机堆内存设置不够

2、出现内存泄漏

3、内存中创建了大量的大对象,并且长时间不能回收。

在抛出OutOfMemoryError之前,通常垃圾收集器会被触发,在java.nio.BITs.reserveMemory()方法中调用了System.gc()。不过也有例外,如果分配一个大对象超过了堆内存大小,此时jvm判定垃圾收集器并不能解决,所以直接抛出OutOfMemoryError。

二、内存泄漏

对象不会再使用,但是GC又不能回收,此时造成内存泄漏。

举例

(1)单例模式

单例的生命周期和应用程序一样长,所以单例程序下,如果持有的对外部对象的引用的话,那么这个外部对象是不能被回收的,会导致内存泄漏。

(2)提供close方法的资源未关闭

数据库连接,网络连接和io连接必须手动close,否则是不能回收的

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值