这个问题基于我从链接 link 的 "Java Garbage Collectors" 部分的了解,看起来 jvm 默认在 Windows 7 上使用 "Parallel GC",我通过 -XX:+PrintCommandLineFlags -version 证实了这一点。本文还说: "并行垃圾回收器使用多个线程执行年轻代垃圾回收。当需要进行大量工作且长时间暂停可接受时应使用此回收器"。
我不确定 Parallel GC 用于老年代收集时使用哪种收集器?
此外,我无法想象出有哪些应用程序可以接受长时间暂停(会导致反应速度较慢)。任何人都希望减少 GC 暂停时间,使应用程序尽可能地响应快。
然后我阅读了 "Concurrent Mark Sweep (CMS) Collector",它收集老年代。
CMS 表示: "它需要低暂停时间,并且可以与垃圾回收共享资源"。 我的问题是,由于其对响应性的重视,难道大多数 Web 应用程序不应该使用 Concurrent Mark Sweep (CMS) 收集器吗? 我相信肯定还有其他因素影响决策,但在阅读此链接后,我觉得应将默认的 GC 类型更改为 Concurrent Mark Sweep (CMS) 收集器。有什么想法/见解吗?
此外,我认为如果我们同时使用 CMS 收集器和并行收集器,其中 CMS 用于老年代,而并行收集器用于年轻代,那么应用程序会更好。
然后我阅读了 "Concurrent Mark Sweep (CMS) Collector",它收集老年代。
CMS 表示: "它需要低暂停时间,并且可以与垃圾回收共享资源"。 我的问题是,由于其对响应性的重视,难道大多数 Web 应用程序不应该使用 Concurrent Mark Sweep (CMS) 收集器吗? 我相信肯定还有其他因素影响决策,但在阅读此链接后,我觉得应将默认的 GC 类型更改为 Concurrent Mark Sweep (CMS) 收集器。有什么想法/见解吗?
此外,我认为如果我们同时使用 CMS 收集器和并行收集器,其中 CMS 用于老年代,而并行收集器用于年轻代,那么应用程序会更好。