眾所周知java的JVM有一套自己的垃圾回收機制因此在許多情況下並不需要java程序開發人員操太多的心然而也許也因為這樣往往會造成java程序員的過分依賴而致使開發出來的程序得不到很好的優化或者說性能尚能提高
問題的關鍵在於不論JVM的垃圾回收機制做得多好計算機的硬件資源是有限的內存更是一項緊張資源因此雖然JVM為我們完成了大部分的垃圾回收但適當地注意編碼過程中的內存管理還是很必要的這樣能讓JVM回收得更順利更高效最大限度地提高程序的效率
mark避免在循環體內創建對象
……
Object obj = null//方式一
for(int i = i k(k) secs]
……
可以看到總共有kb的內存被回收耗時秒
JVM內存相關的參數
XXNewSize(Set the Newgeneralnation heap size)
XXMaxNewSize(Set the Maximum Newgeneralnation heap size)
XXSurvivorRatio(Set New heap size ratios)
Xms(Set minimum heap size)
Xmx(Set maximum heap size)
Xnoclassgc(取消垃圾回收)
Xss(設置棧內存的大小)
例java XXNewSize = m XXMaxNewSize = m XXSurvivorRatio = Xms m Xmx m MyApplication
mark不同編譯方法的類大小
()默認編譯方式javac Kjava
長度=代碼+源文件信息+代碼行序號表
()調試編譯方式javac g Kjava
長度=代碼+源文件信息+代碼行序號表+本地變量表
()代碼編譯方式javax gnone Kjava
長度=代碼
mark經驗之談
盡早釋放無用對象的引用(XX = null )
盡量少使用finalize函數
注意集合數據類型如數組樹圖鏈表等數據結構這些數據結構對GC來說回收更復雜
避免在類的默認構造器中創建大量的初始化大量的對象
避免強制系統做垃圾內存回收
避免顯式申請數組空間不得不顯式申請時盡量准確估計其合理值
From:http://tw.wingwit.com/Article/program/Java/hx/201311/26273.html