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有许多内部高吞吐量服务来满足每秒数千次的用户请求.要优化用户体验,低延迟地响应这些请求非常重要. 比如说,用户经 ...
随机推荐
- CentOS(64位)安装apr
安装apr来提高tomcat 的可伸缩性和性能 cd /usr/local/ 1. 下载apr 和 apr-util最新版 wget http://apache.fayea.com/apache-m ...
- mybatis中的映射类型
- MongoDB 副本集和C#交互,简单测试
MongoDB 副本集和C#交互,简单测试 primary节点宕机: 模拟primary节点宕机的情况,这时查看监控: 可以看到37018已经成了primary节点.主界面宕机导致了整个集群发生一次e ...
- ETL增量处理总结
1 LOG表 1.1 思路 用log表记录业务库某表yw_tableA发生变化数据的主键.数据进入BI库目标表bi_tableA前,先根据log表记录的主键进行delete. 1.2 设计 1.2.1 ...
- POJ2159 ancient cipher - 思维题
2017-08-31 20:11:39 writer:pprp 一开始说好这个是个水题,就按照水题的想法来看,唉~ 最后还是懵逼了,感觉太复杂了,一开始想要排序两串字符,然后移动之类的,但是看了看 好 ...
- Java循环跳转语句之 continue
continue 的作用是跳过循环体中剩余的语句执行下一次循环. 例如,打印 1--10 之间所有的偶数,使用 continue 语句实现代码为: 运行结果: continue与break的区别就是, ...
- mac 下测试各种IE版本
背景 作为前端开发,在谈到兼容性时不得不谈到IE浏览器,那么,如果在mac上该怎么测试各种版本的IE呢 方法 1. 下载VirtualBox虚拟器 2. 下载安装了对应版本的windows系统,htt ...
- [Vue]组件——使用.native和$listeners将控件的原生事件绑定到组件
1.方法1:.native修饰符 1.1.native修饰符:将原生事件绑定到组件的根元素上 <base-input v-on:focus.native="onFocus"& ...
- Learning R笔记(一)
基本操作 帮助文档:?函数.演示:demo(函数).参数列表:formals(函数),返回为成对列表pairlist. 用all.equal函数检查浮点数是否相等,容忍度默认为1.5e-8,如果相等返 ...
- AngularJS 教程 - CodePreject
http://www.codeproject.com/Articles/1065838/AngularJS-Tutorial Article Series Tutorial 1: Angular JS ...