yxhxj2006
導航
BlogJava
首頁
新隨筆
聯系
聚合
管理
<
2012年9月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
留言簿
(7)
給我留言
查看公開留言
查看私人留言
隨筆分類
J2EE(17)
(rss)
java(13)
(rss)
Javascipt
(rss)
Linux(3)
(rss)
PHP(4)
(rss)
SQL(12)
(rss)
勵志(3)
(rss)
測試
(rss)
文章分類
paypal
(rss)
隨筆檔案
2016年6月 (1)
2015年12月 (1)
2015年11月 (1)
2015年10月 (1)
2015年8月 (1)
2015年6月 (1)
2015年5月 (3)
2015年4月 (6)
2015年3月 (1)
2015年2月 (4)
2015年1月 (4)
2014年12月 (6)
2014年11月 (1)
2014年9月 (3)
2014年6月 (2)
2014年5月 (5)
2014年4月 (3)
2014年3月 (3)
2014年2月 (15)
2014年1月 (11)
2013年12月 (1)
2013年11月 (8)
2013年10月 (6)
2013年9月 (2)
2013年8月 (19)
2013年7月 (1)
2013年6月 (1)
2013年5月 (3)
2013年4月 (3)
2013年3月 (5)
2012年12月 (3)
2012年11月 (4)
2012年10月 (1)
2012年9月 (25)
2012年8月 (54)
2012年7月 (10)
2012年6月 (7)
閱讀排行榜
1.?Hibernate實現有兩種配置,xml配置與注釋配置(49850)
2.?公鑰與私鑰 (42422)
3.?使用POI讀取EXCEL中的所有Sheet表 (25905)
4.?Maven實戰(六)依賴(11944)
5.?Oracle中把一個查詢結果插入到一張表中(11031)
評論排行榜
1.?公鑰與私鑰 (31)
2.?Hibernate實現有兩種配置,xml配置與注釋配置(4)
3.?Java通過URL獲取網站Html源代碼 (3)
4.?讓HTML中的文本框中的文字垂直居中 .(3)
5.?struts2表單傳值(2)
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
統計
隨筆 - 228
文章 - 0
評論 - 53
引用 - 0
最新評論
1.?re: 公鑰與私鑰
評論內容較長,點擊標題查看
--chinaltang
2.?re: 如何在magento中建立自定義頁面
請問站長,你這個增加以下片段是在哪里增加的,還有你這是怎么顯示出來頁面呢,總要點擊頁面上的哪個東西跳轉到這個頁面吧,那點擊跳轉怎么操作
--王小丫
3.?re: 公鑰與私鑰
343434
--zhangsa
4.?re: 公鑰與私鑰
真的寫的非常好,通俗易懂,但是不知道有demo沒有,要是有求一份。
--Divella
5.?re: Hibernate實現有兩種配置,xml配置與注釋配置[未登錄]
sa
--sa
Java語言中內存管理的幾個技巧
Java做的系統給人的印象是什么?占內存!說道這句話就會有N多人站出來為java辯護,并舉出一堆的性能測試報告來證明這一點。
其實從理論上來講java做的系統并不比其他語言開發出來的系統更占用內存,那么為什么卻有這么N多理由來證明它確實占內存呢?兩個字,陋習。
(1)別用new Boolean()。
在很多場景中Boolean類型是必須的,比如JDBC中boolean類型的set與get都是通過Boolean封裝傳遞的,大部分ORM也是用Boolean來封裝boolean類型的,比如:
ps.setBoolean("isClosed",new Boolean(true));
ps.setBoolean("isClosed",new Boolean(isClosed));
ps.setBoolean("isClosed",new Boolean(i==3));
通常這些系統中構造的Boolean實例的個數是相當多的,所以系統中充滿了大量Boolean實例小對象,這是相當消耗內存的。Boolean類實際上只要兩個實例就夠了,一個true的實例,一個false的實例。
Boolean類提供兩了個靜態變量:
public static final Boolean TRUE = new Boolean(true);
public static final Boolean FALSE = new Boolean(false);
需要的時候只要取這兩個變量就可以了,
比如:
ps.setBoolean("isClosed",Boolean.TRUE);
那么象2、3句那樣要根據一個boolean變量來創建一個Boolean怎么辦呢?可以使用Boolean提供的靜態方法: Boolean.valueOf()
比如:
ps.setBoolean("isClosed",Boolean.valueOf(isClosed));
ps.setBoolean("isClosed",Boolean.valueOf(i==3));
因為valueOf的內部實現是:return (b ? TRUE : FALSE);
所以可以節省大量內存。相信如果Java規范直接把Boolean的構造函數規定成private,就再也不會出現這種情況了。
(2)別用new Integer.
和Boolean類似,java開發中使用Integer封裝int的場合也非常多,并且通常用int表示的數值通常都非常小。SUN SDK中對Integer的實例化進行了優化,Integer類緩存了-128到127這256個狀態的Integer,如果使用Integer.valueOf(int i),傳入的int范圍正好在此內,就返回靜態實例。這樣如果我們使用Integer.valueOf代替new Integer的話也將大大降低內存的占用。如果您的系統要在不同的SDK(比如IBM SDK)中使用的話,那么可以自己做了工具類封裝一下,比如IntegerUtils.valueOf(),這樣就可以在任何SDK中都可以使用這種特性。
(3)用StringBuffer代替字符串相加。
這個我就不多講了,因為已經被人講過N次了。我只想將一個不是笑話的笑話,我在看國內某“著名”java開發的WEB系統的源碼中,竟然發現其中大量的使用字符串相加,一個拼裝SQL語句的方法中竟然最多構造了將近100個string實例。無語中!
(4)過濫使用哈希表
有一定開發經驗的開發人員經常會使用hash表(hash表在JDK中的一個實現就是HashMap)來緩存一些數據,從而提高系統的運行速度。比如使用HashMap緩存一些物料信息、人員信息等基礎資料,這在提高系統速度的同時也加大了系統的內存占用,特別是當緩存的資料比較多的時候。其實我們可以使用
操作系統中的緩存的概念來解決這個問題,也就是給被緩存的分配一個一定大小的緩存容器,按照一定的算法淘汰不需要繼續緩存的對象,這樣一方面會因為進行了對象緩存而提高了系統的運行效率,同時由于緩存容器不是無限制擴大,從而也減少了系統的內存占用。現在有很多開源的緩存實現項目,比如ehcache、oscache等,這些項目都實現了FIFO、MRU等常見的緩存算法。
(5)避免過深的類層次結構和過深的方法調用。
因為這兩者都是非常占用內存的(特別是方法調用更是堆棧空間的消耗大戶。
(6)變量只有在用到它的時候才定義和實例化。
(7)盡量避免使用static變量,類內私有常量可以用final來代替。
posted on 2012-09-20 00:56
奮斗成就男人
閱讀(129)
評論(0)
編輯
收藏
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
Powered by:
BlogJava
Copyright © 奮斗成就男人
主站蜘蛛池模板:
南通市
|
永吉县
|
河间市
|
巫溪县
|
忻城县
|
个旧市
|
江门市
|
余江县
|
呼伦贝尔市
|
陇南市
|
通许县
|
喀喇
|
竹溪县
|
玛曲县
|
建昌县
|
临洮县
|
康平县
|
芜湖县
|
湘乡市
|
青川县
|
千阳县
|
方山县
|
阜南县
|
石台县
|
望江县
|
永定县
|
平原县
|
泗阳县
|
临漳县
|
苗栗县
|
治多县
|
濮阳市
|
泗洪县
|
富川
|
丰顺县
|
曲沃县
|
黑水县
|
佛教
|
修武县
|
曲麻莱县
|
慈利县
|