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有许多内部高吞吐量服务来满足每秒数千次的用户请求.要优化用户体验,低延迟地响应这些请求非常重要. 比如说,用户经 ...
随机推荐
- html-常用块级及行级标签
1.常见块级标签 <h1></h1>......<h6></h6>:标题标签 h标签:标题标签,自动加粗,h1最大,h6最小 例:(前后隔一行) ...
- MAC OS 命令行使用详解【转】
你可以整天驾驶汽车而不用知道如何修理它们,但是如果你希望当一个维护员,你就需要知道事情是如何运作的.同样的事情也发生在了 Mac OS X 上:你可以一直使用 Mac 而不用知道如何修理它,但是如果你 ...
- RSA非对称加密算法
基本定义: RSA公开密钥密码体制.所谓的公开密钥密码体制就是使用不同的加密密钥与解密密钥,是一种“由已知加密密钥推导出解密密钥在计算上是不可行的”密码体制.在公开密钥密码体制中,加密密钥(即公开密钥 ...
- AJAX的例子
var XMLHttpReq; //根据不同的浏览器创建不同的XMLHttpRequest对象function createXMLHttpRequest() { if (window.XMLHttp ...
- i++为什么是线程不安全的
主要是因为i++这个操作不是原子性的,它会编译成 i = i +1: 其实是做了3个步骤,一个是读取,修改,写入 .所以会出现多线程访问冲突问题. 可以结合Java内存模型来进行说明.
- mac下搭建eclipse+git环境并导入项目
首先官网下载eclipse,然后安装,选择eclipse for java developer. 安装git插件:eclipse-help-install new software-add name随 ...
- JavaScript清除字符串前后空格
一.通过循环检查,然后提取非空格字符串 //去掉前后空白 function trim(s){ return trimRight(trimLeft(s)); } //去掉左边的空白 function t ...
- 《Think in Java》(十四)类型信息
简介 RTTI,RunTime Type Information,运行时类型信息.Java 在运行时识别对象和类的信息主要有两种方式:一种是"传统的"RTTI,它假定我们在编译时已 ...
- java:历史回顾
1.String和StringBuffer区别 2.Runtime和System类,包括对象垃圾收集 Rumtime.gc() System.gc() 调用的其实就是Runtime的gc回收 3.da ...
- Spring事务源码分析总结
Spring事务是我们日常工作中经常使用的一项技术,Spring提供了编程.注解.aop切面三种方式供我们使用Spring事务,其中编程式事务因为对代码入侵较大所以不被推荐使用,注解和aop切面的方式 ...