Java的垃圾回收类型
由于有机会调查Java的GC类型,我简单地总结了一下。
四种类型的GC
有四种不同的GC可用。
-
- シリアルGC
-
- パラレルGC
-
- コンカレント マーク&スイープGC(CMS)
- ガベージファーストGC(G1GC)
谷歌云注册码
以前,基于单线程的标记-清除和压缩是默认的GC方式,在单核环境下使用。
并行垃圾回收
在多核环境中,默认情况下使用多线程进行标记和清理以及压缩。
并发标记和清除GC(CMS)
将GC分为两个阶段,以尽量减少应用程序的停止方法。
-
- アプリケーションと同時にGCを実行するフェーズ
- アプリケーションを止めてGCを実行するフェーズ
由于需要使用CPU资源来进行线程间的协调处理,因此预计应用程序的吞吐量会降低,但整个应用程序的停止时间会变短。这将导致对垃圾回收的响应时间影响较小。
如果CPU使用率很高,性能可能会变差。在这种情况下,可以使用并行GC。
垃圾优先垃圾回收器(G1GC)
将堆分割成称为”区域”的小区域进行使用。
可以预期缩短响应时间。
在Java7中添加了此功能。
据说,它是设计成能充分发挥最大性能的4G以上内存,但是这里的内存是指堆内存还是虚拟机内存呢?不知道是哪个。
GC的历史
-
- Java6までのGC
-
- シリアルGC、パラレルGC、CMSの3つ。結局フルGCでOLDとNEW領域両方を掃除するので、ヒープサイズが大きくなるとアプリケーションの停止時間が延びる。まーCMSは短くなるように頑張っているが・・
-
- Java8まではシリアルGC、パラレルGCがデフォルト
- Java9以降ではG1がデフォルト
使用不同的方式/方法
考虑吞吐量和响应时间。
-
- シリアルGC、パラレルGC(アプリケーション停止型)
シングルコア、マルチコアでのデフォルト(本当?)のGC
スループット重視、でもGCで止まる時間が長くなるのでレスポンスタイムの要件を満たせないことがある。
CMS、G1GC(アプリケーションと並行でコンカレント処理型)
マルチコア環境において、パラレルGCではレスポンスタイムの要件が満たせない場合に選択
スループットが低下する恐れがある