java - 如果您使用 G1 GC,为什么建议使用 Java 10?
问题描述
Java 10 通过迭代改进其现有算法来减少 Full GC 暂停时间。
-XX:ParallelGCThreads
据我了解,G1 不会与我们的应用程序同时运行其收集周期。它仍然会定期暂停应用程序,并且随着堆大小的增加,Full GC 暂停会增加。
那么它是如何提高性能的呢?谁能解释一下?
解决方案
因为直到 Java 10,G1GC 才在 stop-the-world 全 GC 周期中完全并行化。根据JEP 307: Parallel Full GC for G1,这可以改善最坏情况的延迟:
G1 垃圾收集器旨在避免完全收集,但是当并发收集不能足够快地回收内存时,将发生回退完全 GC。G1 的完整 GC 的当前实现使用单线程标记-扫描-紧凑算法。我们打算并行化 mark-sweep-compact 算法并使用与 Young 和 Mixed 集合相同数量的线程。线程数可以通过 -XX:ParallelGCThreads 选项控制,但这也会影响用于 Young 和 Mixed 集合的线程数。
推荐阅读
- c# - EnableRetryOnFailure() 是解决数据库死锁的有效方法吗?它对性能有负面影响吗?
- python - 在 PuTTY 中找不到 PSCP 命令
- javascript - 如何在 App Script 中授权第二个 Html 页面?
- certificate - “CryptographicException:指定的提供程序类型无效”仅在 WebAPI 项目中
- php - 自定义函数来检查字段的唯一性?
- powershell - Powershell中的绝对新手有一个问题
- powerbi - 统计现有员工
- c# - nuget 包 Microsoft.Data.SqlClient 是否适用于实体框架?
- sql - 如何根据某些 where 条件找到下一个更高的数字?
- makefile - 如何在 Makefile 中使用通配符?