对象被视为垃圾收集。
GC算法的类型
以下是 JVM 可用的 4 种类型的 GC 算法。
- 并行GC
- 串行GC
- 并发标记和渗漏
- G1 垃圾优先
并行GC
专为具有中等或大量数据的多线程应用程序而设计,在多处理器环境中运行良好。但它会在垃圾收集期间冻结所有应用程序线程。这是 JVM 选项-XX:+UseParallelGC,您可以选择使用-XX:ParallelGCThreads=<NoOfThreads>.
串行GC
主要设计用于单线程 环境。Liek Parallel GC,它还会在垃圾收集期间冻结所有应用程序线程。JVM 选项是-XX:+UseSerialGC.
并发标记和渗漏(CMS)
这是一个并发 GC,旨在缩短 GC 暂停时间,并且不需要停止正在运行的应用程序来执行 GC。这就是为什么这个过程比串行或并行 GC 慢的原因。它使用多线程进行垃圾收集,并且可以与垃圾收集器共享处理器资源。JVM 选项是-XX:+UseConcMarkSweepGC
G1 垃圾收集器(G1GC)
这是另一种最高效的并发 GC,专为具有大量内存的多处理器环境而设计。JVM 选项是-XX:+UseG1GC
选择 GC 算法的参数
除非您对 GC 时间有特定要求并且需要放置其他规范,否则最好让 JVM 自己选择 GC 算法。
如果要选择和配置 GC 算法,那么需要考虑的参数很少,如堆大小、CPU 核心数、应用程序数据集体积、吞吐量、暂停时间、延迟。
- 堆大小 - 分配给 JVM 的内存总量。更大的堆大小意味着 GC 将花费更多时间。更大的堆内存意味着与更少的堆内存相比,JVM 触发 GC 的频率不会那么频繁。JVM 选项是-Xms=<n> ,-Xmx=<n> 其中-Xms表示最小值,-Xmx是最大值。
- CPU 核心 - GC 算法因 CPU 核心数量而异。其中一些是为单核 CPU 设计的,一些是为多核 CPU 设计的。
- 应用程序数据集 -这是指应用程序使用的对象数量。创建更多数量的新对象,导致填充年轻代空间,需要更多的 GC 时间来释放内存。
- 吞吐量 -它是完成应用程序任务所需的总时间(GC 外)的百分比。它与分配给 JVM 的内存成反比。
- 暂停时间- GC 算法在内存回收期间停止应用程序所花费的时间。它根据不同的GC算法而有所不同。JVM 选项是-XX:MaxGCPauseMillis=<N>
- 延迟 - 它是应用程序的响应时间,直接取决于 GC 暂停时间。
根据上述参数,您必须选择最适合您的应用的 GC 算法。例如,
- 如果应用程序很小并且使用较小的数据集并且在没有暂停时间要求的单处理器上运行,则串行 GC。
- 如果应用程序性能是最高优先级,则并行 GC。
- 当应用程序的响应时间很重要时,G1GC 或 CMS 因为它在运行 GC 时不会保留应用程序。
如果本文对你有帮助,别忘记给我个3连 ,点赞,转发,评论,
咱们下期见