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 ...
随机推荐
- 添加网站QQ客服链接
http://wpa.qq.com/msgrd?v=3&uin=3475432549&site=qq&menu=yes 将其中的uin值改为客服QQ即可
- java中的==、equals()、hashCode()源码分析
转载自:http://www.cnblogs.com/xudong-bupt/p/3960177.html 在Java编程或者面试中经常会遇到 == .equals()的比较.自己看了看源码,结合实际 ...
- js面向对象二级菜单
<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <title> ...
- .NET中数据访问方式(一):LINQ
语言集成查询(Language-Integrated Query),简称LINQ,.NET中的LINQ体系如下图所示: 在编程语言层次,LINQ对于不同的数据源提供了相同的查询语法,方便了程序员操 ...
- chrome插件推荐
分享自己一直在用的chrome插件 1. Adblock Plus 广告屏蔽插件,能够屏蔽YouTube视频广告.Facebook广告.弹出窗口和其他显眼的广告,个人认为非常强大. 2.AutoPag ...
- Doctype 文档类型,标准模式,混杂模式
HTML4.01和XHTML1.0 基于 SGML,支持DTD声明,HTML5不是,但是需要 doctype 来规范浏览器的行为. 标准模式是指,DTD声明定义了标准文档的类型后,浏览器按W3C标准解 ...
- 关于php 高并发解决的一点思路
涉及抢购.秒杀.抽奖.抢票等活动时,为了避免超卖,那么库存数量是有限的,但是如果同时下单人数超过了库存数量,就会导致商品超卖问题.那么我们怎么来解决这个问题呢,我的思路如下(伪代码): sql1:查询 ...
- druid 连接kafuk
java -Xmx256m -Duser.timezone=UTC -Dfile.encoding=UTF-8 -Ddruid.realtime.specFile=examples/indexing/ ...
- Java ssh 框架 hibernate 详细理解
Hibernate框架技术相信对大多数的 java 程序员并不陌生,数据表之间的关系如何通过Hibernate来建立,需要我们认真的分析数据表中数据项之间的交互: 数据库表的之间的关系有: (1)一对 ...
- eclipse中AndroidA工程依赖B工程设置
假设library为B工程,而SlideMenuTest为A工程,且SlideMenuTest需要依赖library工程(减少jar包形式的修改麻烦). 需要简单的设置即可. 1.B工程设置为libr ...