四.GC —三分钟认识JAVA回收机制(Java Garbage Collection)
这里以jdk1.8做讲解。Jdk1.8的分代去掉了永久代,只分为新生代(有的也译为年轻代)和年老代。
名词解释:
系统吞吐量:用于处理应用程序处理事务的线程数与用于GC的线程数的比。
pause time:进行GC时,暂停处理应用程序事务线程的时间。
JVM运行内存别分为新生代和年老代。新生代包含一个Eden区和两个Survivor区。如图:

个人理解的GC过程:
新生代发生Minor GC,Minor GC在Eden区通过标记—清除算法(上节讲的GC算法),得到存活的对象。如果存活的对象大小小于Survivor区,则将存活对象复制到一个空闲的Survivor区,且清空另一个Survivor区(两个Survivor区永远有一个是空闲的);反之,则会将这些存活对象直接复制到年老代。另外新生代的每个对象都有个复制次数值,当一个存活对象到达一定阈值后,也会将其从新生代复制到年老代。
下面我们具体讲解下GC Collectors。进行GC时都会产生暂停应用程序的线程(对内存中的对象进行标记),产生暂停时间(pause time),进行垃圾回收。
The Serial Collector(串行GC):其命令为-XX:+UseSerialGC.。只使用一个线程进行GC,适用于单线程的服务器,或者小数据集(100M)的小应用程序。GC过程如图:

The Parallel Collector(并行GC):其命令为-XX:+UseParallelGC。默认使用的回收机制,它会根据参数,字段调整内存大小。它主要目标是为了提高系统吞吐量(用于处理应用程序处理事务的线程数与用于GC的线程数的比。),它与串行GC相似,主要区别就是它会用多个线程进行GC,缩短了the pause time. 虽然它常被认为是保障系统吞吐量的垃圾回收机制,不过它也可以使用-XX:MaxGCPauseMillis=n参数来限制the pause time。GC过程如图:

不过The Parallel Collector(并行GC)一般设置-XX:MaxGCPauseMillis参数,因为系统如果对the pause time有要求,可以使用The Concurrent Mark Sweep (CMS) collector .
The Concurrent Mark Sweep collector(CMS GC):其命令为-XX:+UseConcMarkSweepGC。它主要目标是为了缩短the pause time.它分为两个阶段mark – Sweep。所以它有两个暂停时间,但时间都很短。GC过程如图:

Garbage-First Garbage Collector(G1 GC):其命令为-XX:+UseG1GC。这个回收机制用于多核,且大内存服务器。它是为满足the pause time ,同时也满足系统吞吐量而设计。它可以同时进行新生代和年老代的垃圾回收,它也对大对象的内存分配和回收做了特殊处理。
经验:
- 设置-Xmx,限制最大内存,以防服务器系统崩溃。
- 设置好最大内存后,调整参数,使年老代的使用率在70%-90%。
另外,满足以下条件时,不建议花费精力去调整GC:
1.一次Minor GC耗时在50ms内。
2.Minor GC的周期在10s以上。
3.一次Full GC耗时在1s内。
3.Full GC的周期在10分钟以上。
四.GC —三分钟认识JAVA回收机制(Java Garbage Collection)的更多相关文章
- python垃圾回收机制(Garbage collection)
由于面试中遇到了垃圾回收的问题,转载学习和总结这个问题. 在C/C++中采用用户自己管理维护内存的方式.自己管理内存极其自由,可以任意申请内存,但也为大量内存泄露.悬空指针等bug埋下隐患. 因此在现 ...
- 简要描述Python的垃圾回收机制(garbage collection)
这里能说的很多.你应该提到下面几个主要的点: Python在内存中存储了每个对象的引用计数(reference count).如果计数值变成0,那么相应的对象就会小时,分配给该对象的内存就会释放出来用 ...
- python面试题之简要描述Python的垃圾回收机制(garbage collection)
这里能说的很多.你应该提到下面几个主要的点: Python在内存中存储了每个对象的引用计数(reference count).如果计数值变成0,那么相应的对象就会小时,分配给该对象的内存就会释放出来用 ...
- [转载]JVM 垃圾回收机制(Garbage Collection)
相关算法: 引用计数法 引用可达法 尚学堂 参考:http://www.sxt.cn/Java_jQuery_in_action/Principle_and_algorithm_of_garbage_ ...
- Java回收机制概述
Java技术体系中所提倡的 自动内存管理 最终可以归结为自动化地解决了两个问题:给对象分配内存 以及 回收分配给对象的内存,而且这两个问题针对的内存区域就是Java内存模型中的 堆区. 垃圾回收机制的 ...
- JavaScript--我发现,原来你是这样的JS(四)(看看变量,作用域,垃圾回收机制是啥)
一.介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第四篇,是红宝书第四章内容(主要是变量和作用域问题),当然其中还有我个人的理解.红宝书这本书可以说是难啃的,要看完不容易,挺厚的 ...
- JS--我发现,原来你是这样的JS(四)(看看变量,作用域,垃圾回收机制是啥)
一.介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第四篇,是红宝书第四章内容(主要是变量和作用域问题),当然其中还有我个人的理解.红宝书这本书可以说是难啃的,要看完不容易,挺厚的 ...
- PythonStudy——内存管理之垃圾回收 Memory management Garbage collection
内存管理 引用计数:垃圾回收机制的依据 # 1.变量的值被引用,该值的引用计数 +1# 2.变量的值被解绑,该值的引用计数 -1# 3.引用计数为0时就会被垃圾回收机制回收 标记清除:解决循环引用问题 ...
- hive impala C++ Java垃圾回收 Garbage Collection GC
hive impala impala 推荐每个节点内存 2^7~2^8GB Impala与Hive的比较 - 文章 - 伯乐在线 http://blog.jobbole.com/43233/ &l ...
随机推荐
- asp net core 跨平台初体验
标: 在 ubuntu 16.04 上部署一个 asp.net core 站点,打开网站后显示一段文字. 安装 net core 运行环境:ubuntu 16.04 LTS 1.添加 apt 源 ...
- 工作流调度引擎---Oozie
Oozie使用教程 一. Oozie简介 Apache Oozie是用于Hadoop平台的一种工作流调度引擎. 作用 - 统一调度hadoop系统中常见的mr任务启动hdfs操作.shell调度. ...
- 移动端APP CSS Reset及注意事项CSS重置
@charset "utf-8"; * { -webkit-box-sizing: border-box; box-sizing: border-box; } //禁止文本缩放 h ...
- java源码学习(二)Integer
Integer类包含了一个原始基本类型int.Integer属性中就一个属性,它的类型就是int. 此外,这个类还提供了几个把int转成String和把String转成int的方法,同样也提供了其它跟 ...
- CYQ.Data V5 分布式自动化缓存设计介绍(二)
前言: 最近一段时间,开始了<IT连>创业,所以精力和写的文章多数是在分享创业的过程. 而关于本人三大框架CYQ.Data.Aries.Taurus.MVC的相关文章,基本都很少写了. 但 ...
- centos6.7下安装mysql5.6.22同时解决中文乱码问题
1.下载 http://dev.mysql.com/downloads/mysql/ 或者使用wget下载: wget http://dev.mysql.com/get/Downloads/MySQL ...
- Sqlserver2005 破解版下载地址
Sqlserver2005 破解版下载地址:http://www.xiaidown.com/soft/from/1583.html
- 导出CSV表格数据
<?php class Csv{ //导出csv文件 public function put_csv($list,$title){ $file_name="CSV".date ...
- css 样式 设置图片成为圆形
<div style="float: left;border-radius:70%; height: 80px; overflow:hidden;"> <img ...
- 搭建nexus私服(maven)
这里提供nexus的直接下载页面的链接: https://www.sonatype.com/download-oss-sonatype maven获取依赖jar包是从中央仓库获取,但很莫名的出现jar ...