JVM G1垃圾回收算法简要介绍
JVM G1垃圾回收算法简要介绍
G1的特点
- 能够像CMS垃圾回收算法一样并发操作应用线程(潜台词:多核)
- 无需太长时间即可压缩空闲内存空间(潜台词:不会引起太多的GC停顿时间)
- 尽可能地让GC时长可控
- 不希望牺牲过多的吞吐量
- 不希望因此耗费大量更多的Heap空间
G1的优势
G1作为CMS的长期替代品,有若干点优势:
- G1是一个压缩收集器,提供足够强的压缩来完全避免狭小的内存分配
- 依赖Regions概念,大大简化收集器逻辑,大部分情况下规避潜在的内存碎片问题
- 比CMS的GC停顿时长更加可预测,并允许用户指定停顿时长
G1的收集步骤
Phase 1: Concurrent Global Marking. 并发扫描一遍之后,G1知道了哪些Region里大部分是空的(即大部分是可回收的对象),G1把收集和压缩操作集中于此,因此得名Garbage First.
Phase 2: Evacuation. 并发地将一个或多个Region的资源拷贝至新的Region,压缩内存、拷贝、释放已拷贝完成的Region. 与此相比,CMS没有压缩内存(去除碎片)这一步,ParallelOld垃圾收集只进行全堆压缩.
细节:G1会估算Region的回收时间,以计算在用户指定时间内可回收多少(量力而行),因此G1不是『实时』收集器 :)
G1的建议使用场景
拥有较大Heap空间(6GB及以上)、低停顿时长(0.5ms以内)要求的应用。
现在使用ParallelGC或CMS的应用,如果存在以下问题,可以考虑切换至G1:
- Full GC过于频繁、停顿时间过长的应用
- 对象分配比例经常发生剧变的应用
- 回收或压缩时间太长的应用(高于0.5s到1s)
如果使用ParallelGC或CMS没有发现以上现象,可以不必急于切换到G1,新版JVM仍然支持旧的垃圾回收算法。
G1的注意事项
若从ParallelOldGC或CMS切换至G1,很可能会发现JVM运行内存变大了。这很大程度上要归因于 用于审计的两个数据结构『Remembered Sets』和『Collection Sets』
- 『Remembered Sets』每个Region都有一个,用于记录该Region中的对象引用,给G1提供并行独立收集各Region内存的可能性,它带来的负面影响不超5%
- 『Collection Sets』记录被收集的Region,它内部的所有数据会被收集干净,它带来的负面影响不超1%
JVM G1垃圾回收算法简要介绍的更多相关文章
- JVM(九):垃圾回收算法
JVM(九):垃圾回收算法 在本文中,我们将从概念模型的角度探讨 JVM 是如何回收对象,包括 JVM 是如何判断一个对象已经死亡,什么时候在哪里进行了垃圾回收,垃圾回收有几种核心算法,每个算法优劣是 ...
- jvm详情——3、JVM基本垃圾回收算法回收策略
JVM基本垃圾回收算法回收策略 引用计数(Reference Counting):比较古老的回收算法.原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数.垃圾回收时,只用收集计数为0的 ...
- 深入探究JVM之垃圾回收算法实现细节
@ 目录 前言 垃圾回收算法实现细节 根节点枚举 安全点 安全区域 记忆集和卡表 写屏障 并发的可达性分析 低延迟GC Shenandoah ZGC 总结 前言 本篇紧接上文,主要讲解垃圾回收算法的实 ...
- JVM常见垃圾回收算法
jdk1.7.0_79 众所周知,Java是一门不用程序员手动管理内存的语言,全靠JVM自动管理内存,既然是自动管理,那必然有一个垃圾内存的回收机制或者回收算法.本文将介绍几种常见的垃圾回收(下文简称 ...
- jvm的垃圾回收算法
一.对象存活判断判断对象是否存活一般有两种方式:1.引用计数:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收.此方法简单,无法解决对象相互循环引用的问题.2 ...
- 深入理解JVM一垃圾回收算法
我们都知道java语言与C语言最大的区别就是内存自动回收,那么JVM是怎么控制内存回收的,这篇文章将介绍JVM垃圾回收的几种算法,从而了解内存回收的基本原理. 一.stop the world 在介绍 ...
- jvm学习-垃圾回收算法(三)
垃圾回收算法 引用计数法 比较古老的一种垃圾回收算法.在java的GC并没有采用 增加一个引用 引用+1 减少一个引用引用减一 每次清除引用为0的的对象 缺点:不能回收循环引用的垃圾对象 标记清除 ...
- JVM中垃圾回收算法
GC 算法与种类 GC的概念 Garbage Collection 垃圾收集1960年 List 使用了GCJava中,GC的对象是堆空间和永久区 引用计数法 老牌垃圾回收算法通过引用计算来回收垃圾使 ...
- 深入理解JVM(五) -- 垃圾回收算法
上篇文章我们了解到哪些内存区域和哪些对象可以被回收,这篇文章我们就来了解一下具体的垃圾回收算法的思路,不讨论具体的实现. 一 最基础算法 标记-清除(Mark-Swap) 为什么说他是最基础的算法,因 ...
随机推荐
- 阿里巴巴主导的“华山版《Java 开发手册》”简介
1."83行代码计划"项目介绍(转自github): 2018年9月22日,在2018杭州云栖大会上,召开<码出高效:Java 开发手册>新书发布会,并宣布将图书所有收 ...
- 求亿级记录中搜索次数Top N的搜索词(MapReduce实现)
程序事例: 日志信息: 二手车 1345 二手房 3416 洗衣机 2789 输入: N=2 输出: 二手房 洗衣机 map函数如下: import java.io.IOException; impo ...
- Java 中的 Servlet&Http&Request
# 今日内容 : 1. Servlet 2. HTTP 协议 3. Request (就是 Servlet 中 service 方法的 形参. (有这个)) ## Servlet : 1. 概 ...
- luogu P3939 数颜色 |vector
题目描述 小 C 的兔子不是雪白的,而是五彩缤纷的.每只兔子都有一种颜色,不同的兔子可能有 相同的颜色.小 C 把她标号从 1 到 n 的 n 只兔子排成长长的一排,来给他们喂胡萝卜吃. 排列完成后, ...
- 2019ICPC 上海网络赛 G题 Substring(哈希)
题意: 给了一个母串S, 每次循环给了一个模板串,问模板串在母 串中“匹配”了多少次?“匹配”的意思就是首字母和尾字母一样, 中间字母顺序可以换. 题解: 字符串hash.我们将询问字符串的首尾特殊h ...
- ARTS-S python把非汉语和非字母的字符替换成空格
# coding: utf-8 import re text = "aa[bb,aa#cWc中a国" FILTER_PUNTS = re.compile("[^\u4E0 ...
- MT9V034 全局快门体验总结
MT9V034 全局快门体验总结 部分照片来源网络,尊重版权. . 这个是实物照片 全局快门(相对滚动快门) 拍摄高速物体的效果 高动态效果 低照度和高照度对比 实际拍照效果图(来自网友华健) 特殊应 ...
- USB工业摄像头设计之上位机
在工业相机中对摄像头要求较高,且采集的图像数据要求是源数据,未经过任何处理. 为了兼容xp.win7(32bit 64bit) 程序采用VS2008 MFC编制,参考网上一些应用. CYUSB驱动与 ...
- Navicat for mysql 免费破解工具+教程
转载自:https://blog.csdn.net/BigCabbageFy/article/details/79789833 navicat for mysql带给大家这款高性能数据库管理开发工具的 ...
- php使用phpqrcode生成二维码
前期准备: 1.phpqrcode类文件下载,下载地址:https://sourceforge.net/projects/phpqrcode/2.PHP环境必须开启支持GD2扩展库支持(一般情况下都是 ...