我是Java的新手。我明白什麼垃圾收集和分頁,交換是孤立的。我想了解它們是如何相互關聯的。 GC是否會導致分頁或交換?我知道GC的主要工作是回收內存。但是,如果需要通過分頁或交換進行回收,還是與GC無關並由OS完成?垃圾收集和交換,分頁之間的關係
1
A
回答
1
要理解關係,請注意Java執行generational garbage collection。在堆上分配了一代年輕的和年老的對象。從JVM的角度來看,它不會關心交換,而是使用它配置的堆大小。但是,堆大小當然會決定管理JVM進程的操作系統的交換行爲。
在年輕一代的收藏中,只收集了相當新的物品。由於最近的分配,這些對象不應該被操作系統換出。當然,如果你爲年輕一代選擇比RAM更大的尺寸,即使收集年輕一代會減慢垃圾收集器的速度,也需要進行交換。
在老生代中,垃圾收集的性能首先取決於收集策略。考慮執行完整垃圾回收的一種天真的算法。該算法必須檢查整個應用程序的對象圖需要訪問整個JVM堆。顯然,整個堆應該適合RAM。否則,垃圾回收將需要大量的交換,這會導致性能不佳。實際上,收集器不會檢查整個對象圖。但是,爲了避免在配置Java應用程序的生產服務器時進行過度交換,選擇適合您的RAM的堆大小仍然是一個好習慣。
0
其實我也是Java世界的新手。我來這裏是因爲我像你一樣對此感到困惑。但是,如果您考慮交換機制,則可能會發現交換和垃圾收集之間的區別。交換是操作系統的一種行爲。垃圾收集是Java jvm的行爲,它是系統的進程/線程。因此,交換和垃圾收集是不同層次的事情。如果內存不夠,交換將發生找出未使用的臨時內存,然後交換出去。
最重要的是,交換可能發生在完整的GC之前。同時,垃圾收集,即全部gc。也可能發生而不交換。一個簡單的例子是:我們用小堆大小來配置JVM。錯誤,我們分配一個大的緩衝區空間,在這種情況下,可能會發生完整的GC,也可能發生OOM。
相關問題
- 1. 垃圾收集YGCT和垃圾收集時間不斷上升
- 2. 垃圾收集提交git
- 3. Java垃圾收集時間?
- 4. 垃圾收集
- 5. 關於Future.firstCompletedOf和垃圾收集機制
- 6. 空和delete()在關於垃圾收集
- 7. 垃圾收集的哪些部分需要系統時間?
- 8. Renderscript和垃圾收集器
- 9. 垃圾收集和存儲
- 10. 垃圾收集和反射
- 11. 方法和垃圾收集
- 12. 垃圾收集和回調
- 13. 垃圾收集和jQuery?
- 14. Java垃圾收集和空
- 15. 結構和垃圾收集
- 16. 指針和垃圾收集
- 17. AEM中的數據存儲垃圾收集和java垃圾收集之間的區別
- 18. 垃圾收集java
- 19. DoctrineCommonCache垃圾收集?
- 20. Java垃圾收集
- 21. 垃圾收集器
- 22. C#垃圾收集
- 23. Java垃圾收集
- 24. WeakEvent垃圾收集
- 25. GWT垃圾收集
- 26. Java之後的垃圾收集器null
- 27. 評估之前應該對垃圾收集功能進行垃圾收集嗎?
- 28. 關於垃圾收集的Java拼圖
- 29. 關閉垃圾收集的混亂
- 30. 關於垃圾收集器的查詢
如果您的GC觸發分頁/交換,則遇到問題。 GC的實現假設它可以隨機訪問內存,並且如果您在GC期間開始交換應用程序和/或機器,可能會停止。 –