四.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 ...
随机推荐
- 如何将HLS延时缩短至4秒,HLS+技术详解
在直播应用中,RTMP 和 HLS 是两种较为成熟且广泛应用的流媒体协议,基本上可以覆盖所有客户端.RTMP 是互联网 TCP/IP 五层体系结构中应用层的协议,主要优势就是实时性高,基本可将直播延时 ...
- [POJ 2115} C Looooops 题解(扩展欧几里德)
题目描述 对于C的for(i=A ; i!=B ;i +=C)循环语句,给出A,B,C和k(k表示变量是在k进制下的无符号整数),判断循环次数,不能终止输出"FOREVER". 输 ...
- Java NIO学习笔记七 Non-blocking Server
Java NIO:Non-blocking Server 即使你了解了Java NIO非阻塞功能的工作(怎么样Selector,Channel, Buffer等等),设计一个无阻塞服务器仍然很难.非阻 ...
- jQuery时间日期插件laydate,兼容bootstrap
解压后,将laydate整个文件放至您项目的任意目录,不要移动其文件结构,它们具有完整的依赖体系. 使用只需在页面引入laydate.js即可. 如果您的网站的js采用合并或模块加载,您需要打开lay ...
- SICP-2.2-数据的抽象
数据的抽象 生活中有许多的事物具有复合结构,例如地理位置所用的经纬度,便是通过一个复合结构来代表位置,在我们的程序当中,我们设法将经度纬度组合成一对,我们既可以把他们当做一个整体单元来进行操作,而且也 ...
- 从Owin到System.Web.Http.Owin的HttpMessageHandlerAdapter看适配器模式
.mytitle { background: #2B6695; color: white; font-family: "微软雅黑", "宋体", "黑 ...
- linux下修改Apache配置文件
linux下修改host文件host文件存放路径 /etc/hosts 可以用vim编辑 //Apache配置虚拟主机 /usr/local/apache/conf/extra/httpd-vhost ...
- SharePoint 2016 安装配置流程及需要注意的地方
1. 安装域, 安装后创建一个用户用于之后的安装配置, 例如 SPAdmin@XXXXX.com 2. 安装sql server 2016 将要安装sql server 的服务器加入域, 并将域账 ...
- 通过线程监控socket服务器是否done机
现实中的socket可能会因为各种原因done机,但这么重要的服务器怎么能允许这种事情发生?这次我们就来通过一个线程去监控socket服务器,如果done机重新将其启动. 下面是监控项目和socket ...
- 关于jquery全选反选 批量删除的一点心得
废话不多说直接上代码: 下面是jsp页面的html代码: <table id="contentTable" class=""> <thead& ...