这里以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 ,同时也满足系统吞吐量而设计。它可以同时进行新生代和年老代的垃圾回收,它也对大对象的内存分配和回收做了特殊处理。

经验:

  1. 设置-Xmx,限制最大内存,以防服务器系统崩溃。
  2. 设置好最大内存后,调整参数,使年老代的使用率在70%-90%。

另外,满足以下条件时,不建议花费精力去调整GC:

1.一次Minor GC耗时在50ms内。

2.Minor GC的周期在10s以上。

3.一次Full GC耗时在1s内。

3.Full GC的周期在10分钟以上。

四.GC —三分钟认识JAVA回收机制(Java Garbage Collection)的更多相关文章

  1. python垃圾回收机制(Garbage collection)

    由于面试中遇到了垃圾回收的问题,转载学习和总结这个问题. 在C/C++中采用用户自己管理维护内存的方式.自己管理内存极其自由,可以任意申请内存,但也为大量内存泄露.悬空指针等bug埋下隐患. 因此在现 ...

  2. 简要描述Python的垃圾回收机制(garbage collection)

    这里能说的很多.你应该提到下面几个主要的点: Python在内存中存储了每个对象的引用计数(reference count).如果计数值变成0,那么相应的对象就会小时,分配给该对象的内存就会释放出来用 ...

  3. python面试题之简要描述Python的垃圾回收机制(garbage collection)

    这里能说的很多.你应该提到下面几个主要的点: Python在内存中存储了每个对象的引用计数(reference count).如果计数值变成0,那么相应的对象就会小时,分配给该对象的内存就会释放出来用 ...

  4. [转载]JVM 垃圾回收机制(Garbage Collection)

    相关算法: 引用计数法 引用可达法 尚学堂 参考:http://www.sxt.cn/Java_jQuery_in_action/Principle_and_algorithm_of_garbage_ ...

  5. Java回收机制概述

    Java技术体系中所提倡的 自动内存管理 最终可以归结为自动化地解决了两个问题:给对象分配内存 以及 回收分配给对象的内存,而且这两个问题针对的内存区域就是Java内存模型中的 堆区. 垃圾回收机制的 ...

  6. JavaScript--我发现,原来你是这样的JS(四)(看看变量,作用域,垃圾回收机制是啥)

    一.介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第四篇,是红宝书第四章内容(主要是变量和作用域问题),当然其中还有我个人的理解.红宝书这本书可以说是难啃的,要看完不容易,挺厚的 ...

  7. JS--我发现,原来你是这样的JS(四)(看看变量,作用域,垃圾回收机制是啥)

    一.介绍 这是红宝书(JavaScript高级程序设计 3版)的读书笔记第四篇,是红宝书第四章内容(主要是变量和作用域问题),当然其中还有我个人的理解.红宝书这本书可以说是难啃的,要看完不容易,挺厚的 ...

  8. PythonStudy——内存管理之垃圾回收 Memory management Garbage collection

    内存管理 引用计数:垃圾回收机制的依据 # 1.变量的值被引用,该值的引用计数 +1# 2.变量的值被解绑,该值的引用计数 -1# 3.引用计数为0时就会被垃圾回收机制回收 标记清除:解决循环引用问题 ...

  9. hive impala C++ Java垃圾回收 Garbage Collection GC

    hive impala impala  推荐每个节点内存  2^7~2^8GB Impala与Hive的比较 - 文章 - 伯乐在线 http://blog.jobbole.com/43233/ &l ...

随机推荐

  1. 20+行代码使用es5 Object.defineProperty 实现简单的watch功能

    /** * 一个简单的demo 帮助理解defineProperty,只对Object类型参数有效 */ $watch=function(myObject,callback){ function in ...

  2. Tomcat 的 catalina.out 日志分割

    一.背景 Tomcat 的 catalina.out 日志量不断增加,占用空间较大,且默认是不滚动的.因此,需要对其进行日志分割,并进行清理. 本文选用 Cronolog 对其进行分割. 二.安装 1 ...

  3. jsp图片上传

    1.要实现图片上传,首先需要一个组件,这里我用的是smartupload.jar可以到这里下载http://download.csdn.net/detail/mengdecike/8279247 2. ...

  4. 委托(C#)

    委托,delegate 关键字用于声明一个引用类型,该引用类型可用于封装命名方法或匿名方法.委托类似于 C++ 中的函数指针:但是,委托是类型安全和可靠的.委托类型声明的格式如下: public de ...

  5. 使用spring mvc返回JSON,chrome可以,firefox不行的问题定位

    转载http://ks.netease.com/blog?id=4024 作者:李景     场景:          前端Post请求同一个url地址,在chrome浏览器上有正常返回json,而在 ...

  6. 基于 HTML5 WebGL 的 3D 网络拓扑图

    在数据量很大的2D 场景下,要找到具体的模型比较困难,并且只能显示出模型的的某一部分,显示也不够直观,这种时候能快速搭建出 3D 场景就有很大需求了.但是搭建 3D 应用场景又依赖于通过 3ds Ma ...

  7. Chapter 4. The MPEG-4 and H.264 Standards

    本章节介绍一些关于MPEG-4标准与H.264标准的基本知识 比较重要的是第95页关于两种标准的对比表格.其他部分没有什么特别重要的细节.

  8. USACO-palsquare 遇到的一个坑

    /** ID: njuwz151 TASK: palsquare LANG: C++ */ #include <iostream> #include <cstdio> #inc ...

  9. java对mysql的增删改查

    -----连接数据库 package connectdb;import java.sql.*;class Dbcon { // 此处连接数据库,独立开一个类,以后操作数据库的每次连接就不用写这么多 p ...

  10. kindeditor使用入门-张国红

    kindeditor是在线编辑器,比较好用,以下是使用这个插件的步骤. 下载kindeditor-4.1.10.zip 解压 asp,asp.net,php对于jsp开发没有用,可以删除 新建web工 ...