Java程序中的內存管理機制是通過GC完成的,“一個對象創建后被放置在JVM的堆內存中,當永遠不在應用這個對象的時候將會被JVM在堆內存中回收。被創建的對象不能再生,同時也沒有辦法通過程序語句釋放”(這個是《Java的GC機制》中提到的定義,呵呵,還依稀記得)這就是GC對垃圾對象的定義。個人感覺這么解釋或許會比較快理解:在運行環境中JVM會對兩種內存進行管理,一種是堆內存(對象實例或者變量),一種是棧內存(靜態或非靜態方法),而JVM所管理的內存區域實際上就是堆內存+棧內存(MS:對象實例+實例化變量+靜態方法+非靜態方法),當JVM在其所管理的內存區域的中無法通過根集合到達對象的時候就會將此對象作為垃圾對象實施回收。
下面是我在項目中對代碼進行優化的幾點嘗試,備忘
1.循環優化
缺:










2.循環內不要創建對象
缺;







這種做法會在內存中保存N份這個對象的引用//會浪費大量的內存空間,改為









3. 什么樣的對象可以將其認定為不可視階段呢?舉個例子吧,在try{...}catch(Exception){...}代碼中,如果在try的代碼塊中聲明了一個obj,那么當整個 try{...}catch(Exception){...}代碼段執行完畢以后這個obj實際上就已經屬于不可視階段了。
所以,應該采用如下方式







4.少用new創建對象
用new關鍵詞創建類的實例時,構造函數鏈中的所有構造函數都會被自動調用。但如果一個對象實現了Cloneable接口,我們可以調用它的clone()方法。clone()方法不會調用任何類構造函數。
缺:
在使用設計模式(Design Pattern)的場合,如果用Factory模式創建對象,則改用clone()方法創建新的對象實例非常簡單。例如,下面是Factory模式的一個典型實現:







改為






當new創建對象不可避免時,注意避免多次的使用new初始化一個對象。 盡量在使用時再創建該對象。
缺:






改為








5.乘法和除法考慮
缺:





改為:




6.盡量多的使用stringbuffer
7清除Session
通常情況,當達到設定的超時時間時,同時有些Session沒有了活動,服務器會釋放這些沒有活動的Session,.. 不過這種情況下,特別是多用戶并訪時,系統內存要維護多個的無效Session。
當用戶退出時,應該手動釋放,回收資源,實現如下:





NOTE:堆內存是在JVM啟動的時候創建,堆內存分為新對象與老對象。對于新對象好像會分三個區域。當優先級最高的區域的堆棧滿了以后JVM將會進行測試,測試內容是那些對象不可到達,不可到達的對象將會放入到老對象區域。同時JVM會將所有對象拷貝到另外兩個區域中,然后經過一段時間依然沒有引用的對象會進入老對象區域。對于老對象區域而言基本上就是等待被GC回收的對象了。(這些還是在大學時學.net時候的知識,直接換成java定義我想其中概念應該一樣。