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 ...
随机推荐
- 老李分享:DBA
poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-845052 ...
- 2.熟悉Java基本类库系列——Java IO 类库
Java中常用的IO操作基本上可以分为四大部分,分别是:File类操作.RandomAccessFile类操作.字节流操作.字符流操作.只要熟练掌握了本文中所列举的所有例子,基本上对于Java的IO流 ...
- Xamarin+Prism开发之.net standard化
前面[Visual Studio 2017创建.net standard类库编译出错原因]已经解决.net standard类库的编译问题,现在可以正式进入主题了.作为.net 跨平台开发者也得跟上时 ...
- POJ 2585 Window Pains 题解
链接:http://poj.org/problem?id=2585 题意: 某个人有一个屏幕大小为4*4的电脑,他很喜欢打开窗口,他肯定打开9个窗口,每个窗口大小2*2.并且每个窗口肯定在固定的位置上 ...
- cooking构建工具报错MSBUILD :error MSB4132解决办法
最近学习cooking构建工具的时候,在自己的笔记本上运行的好好的,项目在公司电脑上clone下来的时候,发现构建报错,逐条查错,试了好多方法也不行 最后在github上找到了答案,只是之前一直没找到 ...
- windows平台把UliPad添加到右键菜单
对.py文件支持右键用UliPad打开方式支持: 1.打开注册表(win+R,运行框输入regedit) 2.先对*.py文件进行设置.找到注册表目录HKEY_CLASSES_ROOT\Python. ...
- Java程序i学习中各阶段的建议
第一部分:对于尚未做过Java工作的同学,包括一些在校生以及刚准备转行Java的同学. 一.Java基础 首先去找一个Java的基础教程学一下,这里可以推荐一个地址,或者你也可以参照这个地址上去找相应 ...
- python在接口测试的实际应用
今天看到@51Testing软件测试网 关于"关于接口测试的总结"的文章,进去浏览了一下,文章主要是针对接口测试的理论性的描述,而实战的内容没有涉及到.刚好今天我将我的系列文章的& ...
- 初学T4模板
1.T4模板语法 <#@ template language="C#v3.5" hostSpecific="true" debug="true& ...
- OK 开始实践书上的项目一:即使标记
OK 开始实践书上的项目一:及时标记 然而....又得往前面看啦! ----------------------我是分割线------------------------ 代码改变世界