我正在開發J2ME中的移動應用程序。在這裏我正面臨記憶問題。我面臨的內存不足錯誤。所以請給出關於它如何擺脫J2ME中的這種錯誤/異常,垃圾回收,內存管理的想法。J2ME中「System.gc()」的作用是什麼?
我有一個疑問,在J2ME中System.gc()
有什麼影響。 J2ME/Java中的System.gc()
和Runtime.getRuntime().gc()
有什麼區別?
感謝&問候,
我正在開發J2ME中的移動應用程序。在這裏我正面臨記憶問題。我面臨的內存不足錯誤。所以請給出關於它如何擺脫J2ME中的這種錯誤/異常,垃圾回收,內存管理的想法。J2ME中「System.gc()」的作用是什麼?
我有一個疑問,在J2ME中System.gc()
有什麼影響。 J2ME/Java中的System.gc()
和Runtime.getRuntime().gc()
有什麼區別?
感謝&問候,
調用System.gc()
將不會修復「OutOfMemoryError」。一個OOME只發生在系統嘗試通過垃圾收集(和其他方式)釋放內存並且未能釋放足夠的內存以繼續執行之後才發生。
修復OOME錯誤的方法是找出正在使用所有內存的內容,並嘗試做一些事情。
,可導致OOMEs可能的問題包括:
內存泄漏;即應用中的某些內容導致大量對象在不再需要時仍保持「可達」狀態。
內存飢餓的數據結構或算法。
沒有足夠的內存來運行具有該輸入數據的應用程序。
第一步解決這個問題應該是使用一個分析器,看看是否有任何顯著泄漏,並找出更普遍的數據結構所使用的所有內存的內容。
運行垃圾收集器。
調用gc方法建議Java虛擬機花費 努力回收未使用的對象,以便使它們當前佔用的內存快速重用。當控制從方法調用返回 時,Java虛擬機已盡力 從所有被丟棄的對象中回收空間。
呼叫System.gc()的實際上等同於呼叫:
Runtime.getRuntime().gc()
- >http://download.oracle.com/javase/6/docs/api/java/lang/System.html#gc%28%29
System.gc()的和調用Runtime.getRuntime()GC ()是等同的。他們建議垃圾收集,但不能保證這實際上會發生。
所以,不要依賴它,事實上,你很想調用它,這是非常罕見的。
據我所知,這些應該手動垃圾收集。但是仍然不能保證jvm會在你請求時真正做到這一點。 –
另外檢查這個問題http://stackoverflow.com/questions/66540/system-gc-in-java –