eclipse死循環(huán)占用的內(nèi)存怎么清理 java程序消耗內(nèi)存太大怎么辦?應(yīng)該如何解決?
java程序消耗內(nèi)存太大怎么辦?應(yīng)該如何解決?只是java程序的內(nèi)存消耗太大,這不是問(wèn)題。表現(xiàn)形式是什么(OOM還是GC),是哪個(gè)對(duì)象(或者數(shù)據(jù))負(fù)責(zé)的?原因是什么(代碼級(jí))?為什么這會(huì)產(chǎn)生問(wèn)題(設(shè)計(jì)
java程序消耗內(nèi)存太大怎么辦?應(yīng)該如何解決?
只是java程序的內(nèi)存消耗太大,這不是問(wèn)題。表現(xiàn)形式是什么(OOM還是GC),是哪個(gè)對(duì)象(或者數(shù)據(jù))負(fù)責(zé)的?原因是什么(代碼級(jí))?為什么這會(huì)產(chǎn)生問(wèn)題(設(shè)計(jì)不良或使用不當(dāng))?
既然說(shuō)到如何優(yōu)化,從個(gè)人經(jīng)驗(yàn)來(lái)說(shuō),可以分為幾個(gè)步驟:
找問(wèn)題:先找出需要優(yōu)化的地方,比如通過(guò)gclog GC,發(fā)現(xiàn)FGC頻率過(guò)高,比如OOM。定位問(wèn)題:其實(shí)就是分析問(wèn)題的過(guò)程。利用JVM工具(如jmap jstat)或linux中的各種trace工具收集相關(guān)數(shù)據(jù)(線索),然后用代碼分析問(wèn)題,必要時(shí)可以重現(xiàn),保證定位問(wèn)題的準(zhǔn)確性。看什么樣的物體占用空間太大,與測(cè)試數(shù)據(jù)的規(guī)模不對(duì)應(yīng)。查看是否存在內(nèi)存泄漏。解決問(wèn)題:你說(shuō)的第二點(diǎn)其實(shí)需要在這一步做,而且必須是針對(duì)定位的問(wèn)題有針對(duì)性的解決方案。優(yōu)化算法。降低算法的空間復(fù)雜度。如果某些算法的空間復(fù)雜度可以從O(N*N)優(yōu)化到O(N)甚至O(logN),那么內(nèi)存使用量就會(huì)降低。檢查是否有不必要的對(duì)象,減少這樣的對(duì)象。為了提高這種能力,沒(méi)有捷徑可走,只有通過(guò)調(diào)查大量的案例來(lái)增加知識(shí)(原理),提高經(jīng)驗(yàn)值。不建議 "優(yōu)化代碼并減少內(nèi)存的使用。有一種說(shuō)法是 "過(guò)早的優(yōu)化是所有罪惡的根源。