當前位置:名人名言大全網 - 笑話大全 - Java語言中內存管理的幾種技巧。

Java語言中內存管理的幾種技巧。

從理論上講,java做的系統並不比其他語言開發的系統占用更多內存,那麽為什麽有那麽多理由證明它確實占用內存呢?兩個字,壞習慣。

(1)不要使用newBoolean()。

在許多情況下,布爾類型是必要的。比如JDBC的boolean類型的set和get都是通過Boolean封裝來傳遞的,大多數ORM也是用Boolean來封裝Boolean類型,比如:

ps.setBoolean("isClosed ",new boolean(true));

ps.setBoolean("isClosed ",new boolean(is closed));

ps.setBoolean("isClosed ",new boolean(I = = 3));

通常這些系統中構造的布爾實例數量相當大,所以系統中充滿了大量的布爾實例小對象,相當消耗內存。其實布爾類只需要兩個實例,壹個是真,壹個是假。

布爾類提供了兩個靜態變量:

publistaticfinalbooleantrule = new boolean(true);

publistaticfinalbooleanflast = new boolean(false);

必要的時候只取這兩個變量,

例如:

ps.setBoolean("isClosed ",布爾型。真);

從壹個布爾變量創建壹個布爾值怎麽樣,就像兩三句話?可以使用Boolean: Boolean.valueOf()提供的靜態方法。

例如:

ps.setBoolean("isClosed ",boolean . value of(is closed));

ps.setBoolean("isClosed ",boolean . value of(I = = 3));

因為valueOf的內部實現是:return(b?真:假);

這樣可以節省很多內存。我相信如果Java規範直接把Boolean的構造函數指定為private,這種情況就再也不會發生了。

(2)不要使用newInteger。

和Boolean類似,java開發中用Integer封裝int的場合很多,通常用int表示的值通常很小。SUNSDK中對Integer的實例化進行了優化,Integer類緩存了-128到127的256個整數。如果使用Integer.valueOf(inti),並且傳入的int的範圍正好在此範圍內,則返回壹個靜態實例。這樣,如果我們用Integer.valueOf代替newInteger,內存占用也會大大減少。如果您的系統要在不同的SDK(比如IBMSDK)中使用,您可以制作自己的工具類包,比如IntegerUtils.valueOf(),這樣您就可以在任何SDK中使用這個特性。

(3)使用StringBuffer,而不是添加字符串。

這個我就不多說了,因為已經說過n遍了。我只想講壹個不是笑話的笑話。我在看國內壹個“著名”的java開發的WEB系統的源代碼時,發現大量的字符串加在壹起,最多用壹種組裝SQL語句的方法構造了近100個字符串實例。沈默!

(4)過度使用哈希表

有壹定開發經驗的開發人員經常使用哈希表(哈希表在JDK的壹種實現是HashMap)來緩存壹些數據,從而提高系統的運行速度。比如java課程,認為用HashMap緩存壹些素材信息、人員信息等基本素材,會增加系統速度和內存占用,尤其是緩存素材較多的時候。事實上,我們可以使用