一、介绍
二、垃圾收集器中“并发”和“并行”的概念
垃圾收集器中有“并发”和“并行”的概念
并行和并发都是并发编程中的专业名词,在谈论垃圾收集器的上下文语境中, 它们可以理解为:
- 并行(Parallel):并行描述的是多条垃圾收集器线程之间的关系,说明同一时间有多条这样的线程在协同工作,通常默认此时用户线程是处于等待状态。
- 并发(Concurrent):并发描述的是垃圾收集器线程与用户线程之间的关系,说明同一时间垃圾收集器线程与用户线程都在运行。 由于用户线程并未被冻结,所以程序仍然能响应服务请求, 但由于垃圾收集器线程占用了一部分系统资源, 此时应用程序的处理的吞吐量将受到一定影响。
三、垃圾回收器介绍
1、垃圾收集器有哪些
Serial & Serial Old
ParNew
Parallel Scavenge &Parallel Old:并行收集器
CMS:并发收集器
G1
2、组合
+UseParallelGC
=新生代ParallelScavenge + 老年代ParallelOld
+UseParallelOldGC
= 同上-UseParallelOldGC
=新生代ParallelScavenge + 老年代SerialOld
三、如何查看Java程序使用的垃圾收集器
命令:java -XX:+PrintCommandLineFlags -version
如下,可见使用了 UseParallelGC
即新生代ParallelScavenge + 老年代ParallelOld
八、
1、当发生垃圾回收的时候,会STW,所以,应该尽量少的产生GC。
2、如果堆内存分配比较大,GC会少一些,因为GC的策略也会去检测剩余内存。
3、为了更高效的进行GC,一般采取分带GC策略。
4、新生代参数配置:-Xmn=10G,则默认Eden分到8G,S0分到1G,S1分到1G
5、 虚拟机团队在JDK8的HotSpot中,把永久代从Java堆中移除了,并把 类的元数据直接保存在本地内存区域 (堆外内存),称之为元空间。
参考:
浅析经典JVM垃圾收集器-Serial/ParNew/Parallel Scavenge/Serial Old/Parallel Old/CMS/G1 - 知乎