前言
很简单!Garbage First(G1垃圾收集器)本文主要内容,当然一篇文章是讲不完的,而且涉及HotSpot VM,就忍不住想:为什么G1作为一个垃圾收集器会被开发出来?并被包含到HotSpot VM中?
正文
我们熟悉基本的垃圾收集概念,诸如年轻代、老年代以及压缩。
1999年,串行GC第一个被引入HotSpot的垃圾收集器,并作为JDK1.3.1的组成部分。 2002年,并行GC和并发标记清除(CMS)GC被引人JDK1.4.2。这3种垃圾收集器基本覆盖了GC最重要的3种使用场景:
1内存占用空间以及并发开销最小化
2应用吞吐量最大化
3GC相关中断时间最小化
接下来就引出了一个好问题:“为什么还需要一个新的垃圾收集器?比如G1“。讲这个之前,看样子需要先简述一下:并行、stop-the-world、并发。因为实在理解困难,造孽了~
并行
并行:多线程的垃圾收集运算
不知道哪一本书看到的话,感觉简洁不废话,挺好的!当一个垃圾收集事件活动被描述为并行,就意味着它正用多线程来执行。当一个垃圾收集器被描述为并行,就意味着它是用多线程来执行垃圾收集。
简单点一下:就HotSpot的垃圾收集器而言,几乎所有多线程GC操作都由JAVA VM(JVM)的内部线程处理。与此相比,一个很重要的例外就是G1垃圾收集器,在G1中某些后台的垃圾收集工作能够由应用线程来承担。
stop-the-world
stop-the-world:在一个垃圾收集事件中,所有的Java应用线程全部被暂停
一个stop-the-world垃圾收集器,就意味着,当它执行垃圾收集操作时,会停掉所有JAVA应用线程(当一个垃圾收集阶段或事件被描述为stop-the-world,也就意味着在这个特定的垃圾收集阶段或事件中,所有JAVA用线程都会被暂停。)重复了两遍,因为实在不知道哪一句更容易懂。
并发
并发:在JAVA应用执行过程中,垃圾收集活动也同时在进行
一个并发垃圾收集阶段或事件,意味着这个垃圾收集阶段或事件可以和应用在同一时间执行。