2014-12-26 34 views
0

我目前正在研究一個2D java遊戲,它利用linkedhashmap在特定的瓦片渲染數據。當我序列化包含它的類對象以及一些其他用於地圖渲染的非瞬態對象時,輸出的文件只有4kb的大小。根據我的理解,RAM的使用量取決於正在讀取的內容的大小,但顯然我使用的文件大小小於4kb,最多隻能使用20%的內存讀取量。這使我相信,我對RAM工作方式的理解是錯誤的,或者我錯過了一些給我糟糕的RAM讀數的東西。爪哇拉姆用法不一致

RAM分析方法

usedPercent = (double) (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory())/Runtime.getRuntime().maxMemory(); 

回答

4

你缺少的一塊是Java運行時環境抓住內存來管理自己,這包括類路徑裝載,實習生緩存,進程空間,棧和堆和permgen空間。

基本上,作爲一名Java開發人員,您不負責內存管理,並且Java不提供使您能夠執行內存管理的工具。

+0

是否輸出的文件太小意味着我正在做的事情,我應該忽略這一事實,即輸出到屏幕的內存在10-20%之間變化。或者它在序列化過程中與文件壓縮有什麼關係? – StoneAgeCoder

+1

我在說內存使用與您的文件大小無關,JVM本身是動態的。重要的是您驗證您的實例正在反序列化爲您的初始值。 –

+1

@ElliottFrisch - 我想知道它是否真的對JVM提供的內存使用情況統計信息有用? – TheLostMind