文章目录
一、什么是内存溢出?
二、什么是内存泄露?
三、如何避免内存溢出和内存泄露?
一、什么是内存溢出?
假设我们JVM中可用的内存空间只有3M,但是我们要创建一个5M的对象,那么新创建的对象就放不进去了。这个时候,我们就叫做内存溢出。就好比是一个容量只有300ml的水杯,我们硬要往里面倒500ml的水,这时候水倒不进去溢出来了,相当于内存溢出。如下图所示:
二、什么是内存泄露?
假设创建了两个1M的对象,一起会占用2M内存。当对象使用完之后,这两个对象并没有释放,因此内存中会留下2M的内存空间一直被占用。而我们的业务代码在程序中会被反复执行,每次执行都会留下2M不被释放,反复执行多次之后,随着时间的累积,就会有大量的对象用完不被释放,导致这些对象不能得到回收,这种情况就叫做内存泄露。
也就是说,在我们的业务代码执行过程中,有些对象它应该被回收,但是又有其他对象引用它,因此GC不能自动回收。所以,该回收的垃圾对象没有被回收,垃圾对象越来越多,可用内存越来越少,若可用内存无法存放新的垃圾对象,最终导致内存泄露。内存泄露最终导致内存溢出。
三、如何避免内存溢出和内存泄露?
1.及时释放对象资源:
在使用完对象后,应该及时将其释放掉。例如,对于一些持有系统资源的对象,如数据库连接、文件句柄等,应该在不需要使用它们时,及时关闭/释放,避免占用系统资源
2.合理配置JVM参数:
通过合理配置JVM的参数,如-Xmx、-Xms等,进行最大堆内存和初始堆内存的配置,避免堆内存溢出。也可以配置JVM的GC策略来优化GC效率,降低内存占用。
3.编码严格遵守规范文章来源:https://www.toymoban.com/news/detail-475149.html
我们使用到一些流对象的时候,比如OutputStream,Reader,BitMap,Document,很容易忘记Close。最麻烦的是还要顺序回收,顺序错了还产生空指针,因此在编码过程要注意,避免低级错误。文章来源地址https://www.toymoban.com/news/detail-475149.html
到了这里,关于什么是内存溢出?什么是内存泄露?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!