SerialGC
单线程;有STW(stop the world); 复制算法。
在JDK 1.3 之前的唯一选择。当时CPU资源很有限,单核CPU。
Serial Old
单线程;STW;标记整理算法
SerialGC的老年代版本
ParNew
Serial的多线程版本,与Serial共用了挺多代码。STW;复制算法。
充分利用CPU多核的能力,提高收集速度。缩短业务线程的停顿时间。
默认开启的线程等于CPU核数。可通过-XX:ParallelGCThreads 设置线程数
核数:单颗CPU上的核心个数
吞吐量
吞吐量= 业务代码时间 /(业务代码时间 + 垃圾收集的时间)
高效利用CPU
停顿时间
对于Web应用,停顿时间最好小到一个网络延迟之内。
Parallel Scavenge
多线程;复制算法
更关注吞吐量;吞吐量优先垃圾收集器
-XX:MaxGCPauseMillis 可以控制停顿时间。大于0的值;GC实现尽可能保证不超过此值;
时间不是越短越好;停顿时间短,每次收集垃圾少,垃圾收集会更频繁。慎重设置。
-XX:GCTimeRatio 垃圾收集时间占比
-XX: +UseAdaptiveSizePolicy 用户自适应大小策略。打开后不需要指定新生代大小等参数,会动态调整这些参数。此垃圾收集器的一个特点。
Parallel Old
多线程;标记整理算法。
Parallel Scavenge + Parallel Old 在对CPU资源敏感时是一个不错的选择。
并发类的垃圾收集器
业务线程和GC线程一起运行
调优
调参数;调使用范围,选择GC类型
带并发和全并发介绍
在计算机科学中,并发是指两个或多个事件在同一时间间隔发生,把任务在不同的时间点交给处理器进行处理。在同一时间点,任务并不会同时运行。而并行则是指两个或者多个事件在同一时刻发生,把每一个任务分配给每一个处理器独立完成。在同一时间点,任务一定是同时运行。
在编程中,并发是指程序的设计以及处理多个同时活跃的任务的能力。全并发是指所有的任务都是并发执行的,而带并发则是指只有部分任务是并发执行的2。
在实现并发的过程中,常用的方法有多线程、多进程、协程等。多线程是指在同一进程内开启多个线程,每个线程执行不同的任务,从而实现并发多进程则是指在操作系统中开启多个进程,每个进程执行不同的任务,从而实现并发协程则是指在同一线程内开启多个协程,每个协程执行不同的任务,从而实现并发。
带并发和全并发的区别在于任务的执行方式。在带并发的情况下,只有部分任务是并发执行的,而其他任务则是串行执行的。而在全并发的情况下,所有的任务都是并发执行的。
带并发和全并发的选择取决于具体的应用场景和需求。如果任务之间存在依赖关系,或者需要保证任务的顺序执行,那么带并发可能更适合。如果任务之间不存在依赖关系,或者需要尽可能地提高任务的执行效率,那么全并发可能更适合。
并发和并行
并发:同时发生。
并行:垃圾收集线程中间有些步骤可以和用户进行一起运行。并行强依赖多线程。
并发不并行
并发并行