我可以從GC日誌中看到,使用堆的內存正在穩步增加,完整的GC永遠不會發生,就像在一天內說過一次一樣。該應用程序尚未崩潰。我應該尋找什麼?任何指針都會非常有幫助。我在Linux機器上運行Java 7。爲什麼我的堆會穩定增長並且完整的GC永遠不會發生?
-1
A
回答
0
爲什麼?因爲某處存在內存泄漏或對象膨脹。我建議你運行MAT:http://eclipse.org/mat
0
Java進程內存包括JVM內存空間(堆+其他區域)和非JVM內存(如果您在JVM中使用某些本機庫)。
通常情況下,堆永遠不會推卸 - 內存可以被JVM重用,但不會釋放到操作系統(這取決於GC算法)。
JVM有兩個選項來控制堆大小-Xms
和-Xmx
,它們設置了堆的初始大小和最大可能值(actually a bit more than 2 options)。
不斷增長的進程內存佔用可能或可能不是內存泄漏的指示。
您需要在JVM中啓用GC日誌記錄或使用某些JVM工具(例如JVisualVM)來驗證您的活動對象羣體是否正在增長。
Java中的內存泄漏通常表現爲「完整GC」事件序列,並且間隔減少。
您不應期望JVM垃圾回收器將內存釋放回操作系統。有些算法無法做到。有些(如G1)可以,但他們可能有理由不立即做。
相關問題
- 1. 執行完GC後,爲什麼永久生成的分配大小會增加?
- 2. 不完整的robots.txt,會發生什麼?
- 3. 爲什麼我的模擬時鐘永遠不會完成?
- 4. javafx8調整大小的增長永遠不會收縮
- 5. 爲什麼我的eventListener永遠不會觸發?
- 6. 爲什麼我的頁面div會在ios(only)上永遠增長?
- 7. QBroster爲空,並且SubscriptionListener永遠不會被觸發
- 8. 爲什麼我的自定義活動永遠不會返回?
- 9. 爲什麼我會永遠需要cancelAnimationFrame()
- 10. 爲什麼SDL_NumJoysticks()永遠不會更新?
- 11. 爲什麼IsDialogMessage()永遠不會返回?
- 12. 爲什麼Application.OnException永遠不會運行?
- 13. 爲什麼這不會永遠運行?
- 14. 爲什麼Process.waitFor()永遠不會返回?
- 15. 爲什麼Python的getrandbits()永遠不會產生負數?
- 16. Asynctask永遠不會完成
- 17. CircleCI永遠不會完成
- 18. 爲什麼我的UIButton的目標永遠不會到達?
- 19. 爲什麼這個線程永遠不會自行完成?
- 20. Netty綁定ChannelFuture永遠不會完成
- 21. 發佈的值永遠不會爲空?
- 22. CLR GC循環會發生什麼?
- 23. XNA - 碰撞永遠不會發生
- 24. 爲什麼我的GUI永遠不會正確?
- 25. 爲什麼我的shouldOverrideLoading方法永遠不會被調用?
- 26. 爲什麼我的datumTokenizer永遠不會被調用?
- 27. 爲什麼我的completionBlock永遠不會在NSOperation中調用?
- 28. 爲什麼我的cin循環永遠不會結束?
- 29. 我的onReadyStateChange永遠不會被調用,爲什麼?
- 30. 爲什麼我的Android Eclipse模擬器永遠不會啓動?
它只在必要時執行完整的GC。如果它沒有執行完整的GC,那麼您沒有給出它這樣做的理由。 –
你有沒有內存泄漏或什麼地方? – EJoshuaS
職稱生成GC稱爲Major,Full GC正在清理整個堆,您可能仍然在堆中有空閒內存。而應關注主要GC發生的頻率以及停止世界停頓的時間。 –