大厂面试题-什么是内存溢出,什么是内存泄漏?

本文解释了内存溢出和内存泄漏的概念,前者指创建大对象超出可用内存,后者是对象未被正确释放导致持续占用内存。文章强调了在编程中注意流对象的关闭和正确回收的重要性,以及现代IDE如何通过智能提示减少这类问题。
摘要由CSDN通过智能技术生成

目录

1、什么是内存溢出?

2、什么是内存泄漏?

3、如何避免?


1什么是内存溢出?

我们来看到右侧的区域假设我们JVM中可用的内存空间只剩下3M,但是我们要创建一个5M的对象,那么,新创建的对象就放不进去了。这个时候,我们就叫做内存溢出。就好比是一个容量只有300ml的水杯,我们硬要往里面倒500ml的水,这时候,就会溢出,倒不进去了,这就相当于是内存的溢出。

,内存泄漏又是怎么回事呢?

2、什么是内存泄漏

还是来看这张图

它代表业务代码执行时,所要占用的内存空间。这段业务代码中创建了两个1M的对象,一起会占用2M内存。当对象使用完之后,这两个对象并没有释放,因此内存中留下2M的内存空间一直被占用。而我们的业务代码在程序中会被反复执行,每次执行都会留下2M不被释放,反复执行多次之后,随着时间的累积,就会有大量的对象用完不被释放,导致这些对象不能得到回收而发生内存溢出,这种情况就叫做内存泄漏。也就说,在我们的业务代码执行过程中,有些对象它应该被回收,但是又有其他对象引用引它,因此,GC不能自动回收。所以,该回收的垃圾对象没有被回收,垃圾对象越堆越,可用内存越来越少,若可用内存无法存放新的垃圾对象,最终导致内存泄漏。存泄漏最终会导致内存溢出。

3、如何避免

我们在Code程中,特别是些一些流对象

比如OutputStream,Reader,BitMap,Document,很容易忘了Close。最麻烦的是还要顺序收,顺序错了还产生空指针,所以,大家在Code过程一定要注意,当然,在有很多IDE会智能提示,也避免了很多低级错误。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值