我使用VisualVM來分析javafx 8應用程序,它執行一些繪圖並使用比我想要的更多的內存。它似乎沒有泄漏,但由於某種原因,即使我使用的堆會上下跳動,但我選擇不同的文件進行圖形繪製時,我的堆總數也不會減少。所有的尖峯都是當我繪製一個新文件,然後在退出該屏幕時退出,但是總堆只是開始並保持不變。這是正常的嗎?VisualVM堆大小沒有按照使用的大小
0
A
回答
5
是的,這是正常的。 JVM從操作系統分配更多的堆內存並且不會返回,但實際使用情況可能會有所不同,即堆中當前未使用的部分可能會發生變化。
其中一個原因是從操作系統中分配內存的代價有點高,數據一旦寫入就可能實際上被分割。垃圾收集可能釋放大塊內存,因此使用的大小會減少,但仍然使用的塊可能遍佈整個堆內存。我不確定JVM如何實際處理這些細節(實際上不同的JVM可能會以不同方式處理),但是您可能會查找在這種情況下使用的免費列表,夥伴系統等。
有人可能會爭辯說,JVM可以在垃圾收集之後對內存進行「碎片整理」,然後釋放過多的堆內存,但這會造成相當的性能下降,尤其是如果大量數據必須在RAM中移動甚至虛擬/交換內存。與許多計算問題一樣,這是空間和CPU使用之間的折衷。
相關問題
- 1. 有沒有最小的堆大小
- 2. Java堆大小的使用
- 3. Nexus的最大堆大小?
- 4. 最大堆棧大小使用
- 5. Elasticsearch堆大小
- 6. NSImageView大小沒有按照它的窗口的
- 7. 的Java堆大小
- 8. -Xms:初始堆大小或最小堆大小?
- 9. 堆轉儲大小vs hprof大小
- 10. Cassandra緩存大小和JVM堆大小
- 11. crossfilter javascript超過最大調用堆棧大小,沒有南
- 12. Android堆大小小於16mb
- 13. Cassandra最小堆大小
- 14. Tomcat7堆棧大小很小
- 15. 堆大小大於-Xmx
- 16. 最大堆大小無效
- 17. 堆棧大小的最大使用限制是否有限制?
- 18. 如何計算保留的堆大小和淺堆大小?
- 19. 信息堆大小
- 20. Netbeans堆大小java
- 21. Android Studio堆大小
- 22. Java堆/池大小
- 23. 增加堆大小
- 24. 更改堆大小
- 25. 堆空間大小?
- 26. Linux堆棧大小
- 27. Android VM堆大小
- 28. activeMQ fileQueueCursor(堆大小)
- 29. Cassandra和堆大小
- 30. Android堆棧大小
所以只要藍線不會隨着時間的推移而穩定下來,我可以考慮這個泄漏的權利?我們假設我們有漏洞,任務管理器顯示使用量持續上升,但看起來我們錯了,在穩定之前,堆只需要更多的內存。 – Mark
@標記基本上是。它應該多快或應該穩定在哪裏取決於你的應用程序,但只要你沒有得到一個OutOfMemoryError它應該沒問題。請記住,出於性能方面的原因,直到垃圾收集與停止世界的收集進行時,堆的使用可能會達到(幾乎)最大值(在您的情況下爲1GB)。 – Thomas