Generational Collectors (分代收集器)

  • GC algos optimised based on two hypotheses / observations:

    • Most objects soon become unreachable - short lived.

    • References from old objects to young objects only exist in small numbers

  • The Oracle HotSpot JVM:

    • Objects allocated in the Eden space of the Young Generation (or New Generation年轻代)

    • Once the Eden space is full, a young collection or minor collection occurs

    • Surviving objects live in the survivor space of the young generation

    • When an object is “old enough”, it is promoted to the Old Generation (or tenured space年老代)

    • When the old generation is “full enough”, a major collection occurs.

  • Allocation is usually very fast

    • Thread Local Allocation Buffers

    • Bump of pointer

Java Garbage Collectors

  • Available in the Oracle HotSpot JVM:

    • Serial Collector

    • Parallel (Throughput) Collector

    • Concurrent Mark-Sweep Collector (CMS)

    • G1

  • Others:

    • Oracle JRockit Real Time

    • IBM Websphere Real Time

    • Azul Zing

Serial Collector

  • Single threaded for all collections (minor and major)

  • All collections are Stop-The-World (STW)

  • Collections use a mark-sweep-compact algorithm

  • Suitable for single-threaded apps with low memory footprint (~100MB)

  • Enabled using -XX:+UseSerialGC

Parallel Collector

  • Similar to the serial collector, but uses multiple threads to speed things up

  • Offers highest throughput of all the collectors

  • Enabled using ‑XX:+UseParallelGC

Concurrent Mark Sweep (CMS) Collector

  • Boasts shorter pauses than the serial or parallel collectors at the expense of application throughput

  • Minor collections similar to serial collector

  • Old generation is collected concurrently with the application

  • Not compacting, so can result in old generation fragmentation

  • Enabled using -XX:+UseConcMarkSweepGC

G1 Garbage Collector

  • G1 = Garbage First

  • Default GC in Java 9

  • Aims for low pause times (<0.5s) and good throughput (90%) for large heaps (>6GB)

  • Generational and concurrent

  • Adaptive to meet pause time target

  • Enabled with -XX:+UseG1GC

G1 Layout

  • Unlike other collectors, G1 divides the heap into evenly sized regions

  • Regions can be 1MB to 32MB in size, in power of two increments

  • Regions can be dynamically assigned as:

    • Eden

    • Survivor

    • Old

    • Humongous

  • G1 aims for 2048 regions based on minimum heap size

G1 Minor Collections

  • Also known as Evacuation Pauses

  • A STW event

  • Subset of regions logically assigned as the young generation

  • Minor collection triggered when the young generation is full

  • Live objects “evacuated” to new regions to achieve compaction

  • Objects moved to either old region or survivor region based on age

  • Number of regions in young generation can be changed to meet the pause time target

G1 Concurrent Marking

  • Triggered when the used heap reaches a configurable threshold of total heap

  • Aim is to identify which old generation regions can be collected

  • Multi-phased process, some of which is STW, some concurrent with application

  • Concurrent phase can be stopped by a young collection

G1 Mixed Collections

  • Occurs after the concurrent marking phase

  • Old regions optionally added to the eden and survivor regions to be collected

  • Old regions eligible for collection usually split over multiple collections

  • The number of mixed collections is tunable via flags

  • G1 reverts to minor (young) collections when mixed collections have finished

G1 Humongous Objects

  • Humongous object defined as one greater than 50% the size of a region.

  • Allocated directly to the old generation to avoid copying during young collections

  • Region(s) marked as humongous

  • Don’t want too many, and ideally they should be long lived.

G1 Evacuation Failures and Full GC

  • Evacuation failure is when there is no free space to copy objects to

  • Evacuation failures trigger a full GC - very expensive!

G1 Configuration

  • There are many flags. Advice is to not tune G1 much unless you have to.

  • Some flags are experimental, and require -XX:+UnlockExperimentalVMOptions to be set also

  • Primary flag is to control the pause target:
    -XX:MaxGCPauseMillis=200

  • -XX:InitiatingHeapOccupancyPercent=45
    Percentage of heap occupancy at which the marking phase is triggered

  • Many more options described at http://www.oracle.com/technetwork/articles/java/g1gc-1984535.html

  • Some options for GC logging:

    • -XX:+PrintGCDetails - Enable detailed GC logging

    • -XX:+PrintGCDateStamps - Print absolute date stamps at beginning of GC lines

    • -XX:+PrintGCTimeStamps Print a timestamp reflecting the real time passed in seconds since JVM start

GC Logs

    • New log file every time the JVM starts

Java Garbage Collectors的更多相关文章

  1. 细述 Java垃圾回收机制→Types of Java Garbage Collectors

    细述 Java垃圾回收机制→Types of Java Garbage Collectors 转自:https://segmentfault.com/a/1190000006214497 本文非原创, ...

  2. Garbage Collectors – Serial vs. Parallel vs. CMS vs. G1 (and what’s new in Java 8)

    转自:http://blog.takipi.com/garbage-collectors-serial-vs-parallel-vs-cms-vs-the-g1-and-whats-new-in-ja ...

  3. Garbage Collectors - Serial vs. Parallel vs. CMS vs. G1 (and what's new in Java 8)--转

    The 4 Java Garbage Collectors - How the Wrong Choice Dramatically Impacts Performance The year is 20 ...

  4. Java Garbage Collection Basics--转载

    原文地址:http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html Overview Purpose ...

  5. Java Garbage Collection/垃圾收集 策略查看

    Java 的垃圾收集有各种各样的策略,默认的策略也会经常的改变. --比如到底是 serial , parallel, CMS; 具体到 Minor 怎么样,Old 又怎么样? 命令 java -XX ...

  6. [翻译]Java垃圾收集精粹(Java Garbage Collection Distilled)

    source URL: http://www.infoq.com/articles/Java_Garbage_Collection_Distilled Name: Java Garbage Colle ...

  7. How to Tune Java Garbage Collection--reference

    reference:http://architects.dzone.com/articles/how-tune-java-garbage The Performance Zone is support ...

  8. JVM垃圾收集(Java Garbage Collection / Java GC)

    JVM垃圾收集(Java Garbage Collection / Java GC) Java7 Java8 JDK1.8之后将最初的永久代取消了,由元空间取代. 堆内存调优简介 public sta ...

  9. 四.GC —三分钟认识JAVA回收机制(Java Garbage Collection)

    这里以jdk1.8做讲解.Jdk1.8的分代去掉了永久代,只分为新生代(有的也译为年轻代)和年老代. 名词解释: 系统吞吐量:用于处理应用程序处理事务的线程数与用于GC的线程数的比. pause ti ...

随机推荐

  1. AngularJS1.X学习笔记4-内置事件指令及其他

    AngularJS为我们定义了一系列事件指令,方便我们对用户的操作作出响应.甚至他还有一个可选模块提供了触摸事件和手势事件的支持,为移动端开发提供了可能.现在开始学习一下AngularJS的事件指令. ...

  2. Codeforces Round #384 (Div. 2).C

    C. Vladik and fractions time limit per test 1 second memory limit per test 256 megabytes input stand ...

  3. TCP/IP笔记(五)IP协议相关技术

    IP旨在让最终目标主机收到数据包,但是在这一过程中仅仅有IP时无法实现通信的.必须还要又能够解析主机名称和MACdivide功能,以技术包在发送过程中异常情况处理的功能. 这篇主要介绍下DNS.ARP ...

  4. AOP学习笔记二

    Spring AOP采用Java作为AOP的实现语言(AOL),学习曲线平滑,Spring AOP对AspectJ也提供了很好的集成与支持.最为第二代的AOP,采用动态代理机制和字节码生产技术实现,在 ...

  5. Sublime text3 设置的中文翻译

    // While you can edit this file, it's best to put your changes in // "User/Preferences.sublime- ...

  6. ValueStack

    1.把list集合压入栈顶 /** * * 查找所有的用户 * @return */ public String findAll() { List<User> allUser = user ...

  7. tmux鼠标配置出现错误unknown option: mode-mouse

    setw -g mode-mouse on set -g mouse-select-pane on set -g mouse-resize-pane on set -g mouse-select-wi ...

  8. AspNetPager 分页的详细用法(ASP.NET)

    1.[添加AspNetPager.dll文件] 2.[使用方法] public static DataTable GetRecord(SystemModel.Pager mt, ref int Tot ...

  9. java复习(2)---java基础杂记

    java命名规范: 参考:http://www.cnblogs.com/maowang1991/archive/2013/06/29/3162366.html 1.项目名小写 2.包名小写 3.类名每 ...

  10. div模拟输入框input/textarea

    //html<!--填写信息--> <div class="info-wrap"> <form class="formToCheck&quo ...