zoukankan      html  css  js  c++  java
  • Java Garbage Collectors

    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

  • 相关阅读:
    NYOJ 10 skiing DFS+DP
    51nod 1270 数组的最大代价
    HDU 4635 Strongly connected
    HDU 4612 Warm up
    POJ 3177 Redundant Paths
    HDU 1629 迷宫城堡
    uva 796
    uva 315
    POJ 3180 The Cow Prom
    POJ 1236 Network of Schools
  • 原文地址:https://www.cnblogs.com/codingforum/p/6435649.html
Copyright © 2011-2022 走看看