文章目錄
一、什么是內(nèi)存溢出?
?二、什么是內(nèi)存泄露?
三、如何避免內(nèi)存溢出和內(nèi)存泄露?
一、什么是內(nèi)存溢出?
????????假設(shè)我們JVM中可用的內(nèi)存空間只有3M,但是我們要創(chuàng)建一個5M的對象,那么新創(chuàng)建的對象就放不進去了。這個時候,我們就叫做內(nèi)存溢出。就好比是一個容量只有300ml的水杯,我們硬要往里面倒500ml的水,這時候水倒不進去溢出來了,相當于內(nèi)存溢出。如下圖所示:
?二、什么是內(nèi)存泄露?
????????假設(shè)創(chuàng)建了兩個1M的對象,一起會占用2M內(nèi)存。當對象使用完之后,這兩個對象并沒有釋放,因此內(nèi)存中會留下2M的內(nèi)存空間一直被占用。而我們的業(yè)務(wù)代碼在程序中會被反復(fù)執(zhí)行,每次執(zhí)行都會留下2M不被釋放,反復(fù)執(zhí)行多次之后,隨著時間的累積,就會有大量的對象用完不被釋放,導(dǎo)致這些對象不能得到回收,這種情況就叫做內(nèi)存泄露。
? ? ? ? 也就是說,在我們的業(yè)務(wù)代碼執(zhí)行過程中,有些對象它應(yīng)該被回收,但是又有其他對象引用它,因此GC不能自動回收。所以,該回收的垃圾對象沒有被回收,垃圾對象越來越多,可用內(nèi)存越來越少,若可用內(nèi)存無法存放新的垃圾對象,最終導(dǎo)致內(nèi)存泄露。內(nèi)存泄露最終導(dǎo)致內(nèi)存溢出。
三、如何避免內(nèi)存溢出和內(nèi)存泄露?
1.及時釋放對象資源:
????????在使用完對象后,應(yīng)該及時將其釋放掉。例如,對于一些持有系統(tǒng)資源的對象,如數(shù)據(jù)庫連接、文件句柄等,應(yīng)該在不需要使用它們時,及時關(guān)閉/釋放,避免占用系統(tǒng)資源
2.合理配置JVM參數(shù):
????????通過合理配置JVM的參數(shù),如-Xmx、-Xms等,進行最大堆內(nèi)存和初始堆內(nèi)存的配置,避免堆內(nèi)存溢出。也可以配置JVM的GC策略來優(yōu)化GC效率,降低內(nèi)存占用。
3.編碼嚴格遵守規(guī)范文章來源:http://www.zghlxwxcb.cn/news/detail-475149.html
? ? ? ? 我們使用到一些流對象的時候,比如OutputStream,Reader,BitMap,Document,很容易忘記Close。最麻煩的是還要順序回收,順序錯了還產(chǎn)生空指針,因此在編碼過程要注意,避免低級錯誤。文章來源地址http://www.zghlxwxcb.cn/news/detail-475149.html
到了這里,關(guān)于什么是內(nèi)存溢出?什么是內(nèi)存泄露?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!