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 triggeredMany 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的更多相关文章
- 细述 Java垃圾回收机制→Types of Java Garbage Collectors
细述 Java垃圾回收机制→Types of Java Garbage Collectors 转自:https://segmentfault.com/a/1190000006214497 本文非原创, ...
- 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 ...
- 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 ...
- Java Garbage Collection Basics--转载
原文地址:http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html Overview Purpose ...
- Java Garbage Collection/垃圾收集 策略查看
Java 的垃圾收集有各种各样的策略,默认的策略也会经常的改变. --比如到底是 serial , parallel, CMS; 具体到 Minor 怎么样,Old 又怎么样? 命令 java -XX ...
- [翻译]Java垃圾收集精粹(Java Garbage Collection Distilled)
source URL: http://www.infoq.com/articles/Java_Garbage_Collection_Distilled Name: Java Garbage Colle ...
- How to Tune Java Garbage Collection--reference
reference:http://architects.dzone.com/articles/how-tune-java-garbage The Performance Zone is support ...
- JVM垃圾收集(Java Garbage Collection / Java GC)
JVM垃圾收集(Java Garbage Collection / Java GC) Java7 Java8 JDK1.8之后将最初的永久代取消了,由元空间取代. 堆内存调优简介 public sta ...
- 四.GC —三分钟认识JAVA回收机制(Java Garbage Collection)
这里以jdk1.8做讲解.Jdk1.8的分代去掉了永久代,只分为新生代(有的也译为年轻代)和年老代. 名词解释: 系统吞吐量:用于处理应用程序处理事务的线程数与用于GC的线程数的比. pause ti ...
随机推荐
- AngularJS1.X学习笔记4-内置事件指令及其他
AngularJS为我们定义了一系列事件指令,方便我们对用户的操作作出响应.甚至他还有一个可选模块提供了触摸事件和手势事件的支持,为移动端开发提供了可能.现在开始学习一下AngularJS的事件指令. ...
- Codeforces Round #384 (Div. 2).C
C. Vladik and fractions time limit per test 1 second memory limit per test 256 megabytes input stand ...
- TCP/IP笔记(五)IP协议相关技术
IP旨在让最终目标主机收到数据包,但是在这一过程中仅仅有IP时无法实现通信的.必须还要又能够解析主机名称和MACdivide功能,以技术包在发送过程中异常情况处理的功能. 这篇主要介绍下DNS.ARP ...
- AOP学习笔记二
Spring AOP采用Java作为AOP的实现语言(AOL),学习曲线平滑,Spring AOP对AspectJ也提供了很好的集成与支持.最为第二代的AOP,采用动态代理机制和字节码生产技术实现,在 ...
- Sublime text3 设置的中文翻译
// While you can edit this file, it's best to put your changes in // "User/Preferences.sublime- ...
- ValueStack
1.把list集合压入栈顶 /** * * 查找所有的用户 * @return */ public String findAll() { List<User> allUser = user ...
- 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 ...
- AspNetPager 分页的详细用法(ASP.NET)
1.[添加AspNetPager.dll文件] 2.[使用方法] public static DataTable GetRecord(SystemModel.Pager mt, ref int Tot ...
- java复习(2)---java基础杂记
java命名规范: 参考:http://www.cnblogs.com/maowang1991/archive/2013/06/29/3162366.html 1.项目名小写 2.包名小写 3.类名每 ...
- div模拟输入框input/textarea
//html<!--填写信息--> <div class="info-wrap"> <form class="formToCheck&quo ...