Java HotSpot JVM垃圾回收
一、J2SE 5.0 HotSpot
JVM堆内存包括:年轻代、老年代、永久代
年轻代包括:Eden区、Survivor区
Survivor区包括:From区、To区
1. 年轻代GC(young gc/minor gc)
① Eden区存活的对象拷贝至To(From)区,清空Eden区,若To(From)区不足则直接拷贝至老年代
② From区存活对象拷贝至老年代,清空From(To)区
③ 1-2步循环From区与To区轮换执行
2. 老年代GC(full gc/major gc)
当老年代对象大小达到占总大小的一定比例(参数控制),进行老年代gc,清空老年代中非存活的对象
3. 串行gc、并行gc
串行gc:jvm默认即串行gc,也可通过参数 -XX:+UseSerialGC指定。
并行gc:充分利用多核cpu,多线程进行gc,通过参数-XX:+UseParallelGC指定。
并行压缩gc(Parallel Compacting Collector):基本已替代并行gc,为老年代gc使用了新算法,减少停顿时间,适用于对停顿时间有严格约束的应用。可通过参数-XX:+UseParallelOldGC指定。
4. 标记清除gc(CMS gc)
针对较大的堆内存情景,进一步减少停顿时间。可通过参数-XX:+UseConcMarkSweepGC 指定。
分为如下几个阶段:
① 初始标记(init mark):停顿所有线程,标识出初始存活对象的集合。耗时较短,约70ms
② 标记(mark):从初始标记的对象集合中标记出所有活跃的对象。耗时较长,约1.64s
③ 预清除(preclean):预先清除。耗时较短,约10ms
④ 可中断的预清除(abortable-preclean):可中断的预清除,耗时较长,约5s
⑤ 重标记(remark):停顿所有线程,重新标记在标记(mark)阶段中修改过的对象,获得真实的所有活跃的对象。耗时较短,约70ms
⑥ 交换(sweep):交换,耗时较长,约3.8s
⑦ 重置(reset):重置,耗时较短,约20ms
gc时机:cms根据之前gc时机的统计而定,也根据老年代占用率阈值而定,根据参数– XX:CMSInitiatingOccupancyFraction=n,默认值为68
增量模式:在年轻代gc之间穿插老年代gc,适用于单核或双核处理器,可通过–XX:+CMSIncrementalMode指定。
5. 常用gc选项
–XX:+PrintGC 打印gc信息
–XX:+PrintGCDetails 打印gc详细信息
-XX:+PrintHeapAtGC 打印gc时的堆大小
–XX:+PrintGCTimeStamps 打印gc时间戳
-XX+UseCMSCompactAtFullCollection 每次full gc时进行压缩
-XX:CMSFullGCsBeforeCompaction=n 在n次full gc后进行压缩
–XX:ParallelGCThreads=n 并行gc线程数
Java HotSpot JVM垃圾回收的更多相关文章
- Java:JVM垃圾回收(GC)机制
JVM垃圾回收算法 1.标记清除(Mark-Sweep) 原理: 从根集合节点进行扫描,标记出所有的存活对象,最后扫描整个内存空间并清除没有标记的对象(即死亡对象)适用场合: 存活对象较多的情况下比较 ...
- Java虚拟机学习笔记——JVM垃圾回收机制
Java虚拟机学习笔记——JVM垃圾回收机制 Java垃圾回收基于虚拟机的自动内存管理机制,我们不需要为每一个对象进行释放内存,不容易发生内存泄漏和内存溢出问题. 但是自动内存管理机制不是万能药,我们 ...
- Java虚拟机垃圾回收:内存分配与回收策略 方法区垃圾回收 以及 JVM垃圾回收的调优方法
在<Java对象在Java虚拟机中的创建过程>了解到对象创建的内存分配,在<Java内存区域 JVM运行时数据区>中了解到各数据区有些什么特点.以及相关参数的调整,在<J ...
- JVM内存管理和JVM垃圾回收机制
JVM内存管理和JVM垃圾回收机制(1) 这里向大家描述一下JVM学习笔记之JVM内存管理和JVM垃圾回收的概念,JVM内存结构由堆.栈.本地方法栈.方法区等部分组成,另外JVM分别对新生代和旧生代采 ...
- Java虚拟机之垃圾回收详解一
Java虚拟机之垃圾回收详解一 Java技术和JVM(Java虚拟机) 一.Java技术概述: Java是一门编程语言,是一种计算平台,是SUN公司于1995年首次发布.它是Java程序的技术基础,这 ...
- JDK分析工具&JVM垃圾回收(转)
转自:http://blog.163.com/itjin45@126/blog/static/10510751320144201519454/ 官方手册:http://docs.oracle.com/ ...
- jvm - 垃圾回收
jvm - 垃圾回收 注意 : 本系列文章为学习系列,部分内容会取自相关书籍或者网络资源,在文章中间和末尾处会有标注 垃圾回收的意义 它使得java程序员不再时时刻刻的关注内存管理方面的工作. 垃圾回 ...
- JVM基础系列第8讲:JVM 垃圾回收机制
在第 6 讲中我们说到 Java 虚拟机的内存结构,提到了这部分的规范其实是由<Java 虚拟机规范>指定的,每个 Java 虚拟机可能都有不同的实现.其实涉及到 Java 虚拟机的内存, ...
- 高吞吐低延迟Java应用的垃圾回收优化
高吞吐低延迟Java应用的垃圾回收优化 高性能应用构成了现代网络的支柱.LinkedIn有许多内部高吞吐量服务来满足每秒数千次的用户请求.要优化用户体验,低延迟地响应这些请求非常重要. 比如说,用户经 ...
随机推荐
- LeetCode——Find Duplicate Subtrees
Question Given a binary tree, return all duplicate subtrees. For each kind of duplicate subtrees, yo ...
- (转帖) 为Docker容器指定自定义网段的固定IP/静态IP地址
作者:雨水,日期:2016-04-09 CSDN博客: http://blog.csdn.net/gobitan 摘要:Docker容器运行的时候默认会自动分配一个默认网桥所在网段的IP地址.但很多 ...
- PHP闭包 function() use(){}
php的闭包(Closure)也就是匿名函数.是PHP5.3引入的. 闭包的语法很简单,需要注意的关键字就只有use,use意思是连接闭包和外界变量. $a =function()use($b) { ...
- mysql 不同条件count ,多条件count()
create table abc(A int,B int) Select A,count(B) as total from ABC group by A Select A,count(B) as to ...
- [spring]xml配置文件---节点解释
转载:https://blog.csdn.net/u012099568/article/details/51423837
- 如何高效的使用 Git
-- 代码昨天还是运行好好的今天就不行了. 代码被删了. 突然出现了一个奇怪的 bug,但是没人知道怎么回事. 如果你出现过上面的任何一种情况,那本篇文章就是为你准备的. 除了知道 git add, ...
- spring mvc:练习:javaConfig配置和注解
Spring4 MVC HelloWorld 注释/JavaConfig为示例,一步一步以简单的方式学习Spring4 MVC 的注解,项目设置,代码,部署和运行. 我们已经使用XML配置开发了一个H ...
- jQuery 获取、设置表单元素的值
获取表单元素值: 文本框,文本区域: $("#txt").attr("value"): 多选框 checkbox:$("#checkbox_id&qu ...
- Java中子类对象赋值给父类变量
1. 在Java中将一个字类对象赋值给父类变量是合法的,这也是实现多态(即方法的动态分派)的前提条件之一. 2. 在Java中父类赋值同样也适用于数组.可以将一个子类数组赋值给一个父类数组变量.但可能 ...
- Android面试三之Service
Service是什么 Service(服务)是一个没有用户界面的在后台运行执行耗时操作的应用组件.其他应用组件能够启动Service,并且当用户切换到另外的应用场景,Service将持续在后台运行.另 ...