日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

什么是內(nèi)存泄漏,內(nèi)存泄漏和內(nèi)存溢出

JAVA中的內(nèi)存溢出和內(nèi)存泄露是什么?

什么是內(nèi)存泄漏,內(nèi)存泄漏和內(nèi)存溢出


【什么是內(nèi)存泄漏,內(nèi)存泄漏和內(nèi)存溢出】我們都知道,Java憑借JVM有一套自動回收對象的機制,能自動進行內(nèi)存管理,但這不是一勞永逸的方法,內(nèi)存泄露和內(nèi)存溢出還是會時時侵?jǐn)_java編程人員!先來看下內(nèi)存相應(yīng)的概念!內(nèi)存泄露:內(nèi)存中的無用對象因為引用存在,對象遲遲不能回收,導(dǎo)致內(nèi)存占用越來越高,最終導(dǎo)致內(nèi)存溢出; 比較常見的場景是生命周期短的對象已經(jīng)不再需要,但是生命周期比較長的對象有著短周期的對象引用,導(dǎo)致內(nèi)存泄露;內(nèi)存溢出:程序想要獲取內(nèi)存的時候,已經(jīng)沒有新的內(nèi)存可供使用,這時就爆出了out of memory ,內(nèi)存溢出又分為堆溢出和棧溢出!堆溢出常見關(guān)鍵字有java.lang.OutOfMemoryError: Java heap space 棧溢出常見關(guān)鍵字java.lang.StackOverflowError 內(nèi)存泄露的本質(zhì)就是無用對象的持續(xù)增長,比如說:1,靜態(tài)類對象中存儲其他對象,因為static的聲明周期長,放入這些對象的其他對象遲遲得不到釋放;2,諸如數(shù)據(jù)庫連接等網(wǎng)絡(luò),io連接,必須要顯式的close掉,否則也容易泄露; 3,單例模式初始化對象時,引用其他的對象引用,也將導(dǎo)致對象不能釋放;如何避免內(nèi)存泄露呢?長周期的對象中盡量不要引用短周期的對象,或者及時釋放;可以經(jīng)常使用jstack等內(nèi)存工具監(jiān)控內(nèi)存的增長情況,及時進行處理!內(nèi)存泄露如果不是很嚴(yán)重,一時半會兒也發(fā)現(xiàn)不了,發(fā)展下去通常會變成情節(jié)嚴(yán)重的內(nèi)存溢出!我們知道堆主要用來放對象,棧用來存放對象引用,堆棧溢出通常是不同的原因?qū)е碌模《岩绯龀R姷那榫叭缦拢?1,堆內(nèi)存分配過小:可通過-Xms2048m-Xmx2048m調(diào)整堆內(nèi)存2,線程數(shù)過大,超過了操作系統(tǒng)限制 3.java.lang.OutOfMemoryError:PermGenspace:老年代溢出,可通過-XX:MaxPermSize=128m -XXermSize=128m調(diào)整棧溢出常見情景如下: 遞歸調(diào)用方法,會創(chuàng)建大量棧幀,直至溢出!無論是堆棧溢出還是泄露,幾乎都是代碼編寫不嚴(yán)謹(jǐn)引起,最主要的是注意不要大量創(chuàng)建對象或者線程,并注意及時釋放!最近會持續(xù)的的分享JAVA開發(fā)相關(guān)技術(shù),敬請關(guān)注 。

    推薦閱讀