java gc 总结
垃圾查找
1.基于计数器
对象有引用计数,计数为0的,可以被收集
2.基于有向图
从gc root(栈、静态变量、JNI 变量)遍历,能访问的对象,不用被收集,其他的,可以被收集
因为计数器不能解决 互相引用的问题,一般都不使用这种算法
目前商业JVM 都是使用有向图算法 来找垃圾
找到了垃圾,下面开始要回收了
垃圾回收
1.基于复制
把存活对象复制到其他区域,当前区域整体释放
2.基于标记-清除
先标记可回收对象,再释放被回收对象,这种情况下,有内存碎片
3.基于标记-整理
先标记可回收对象,再把不可回收对象 压缩到当前回收域的一端,整体释放当前回收域剩下的区域, 能防止内存碎片
以上这3个算法是基础算法
还有一些具体的加速回收速度,减小停顿时间,增加吞吐量的算法
1.内存分代
不同存活时间的对象,放到不同的分代区域中,新生代/老生代
2.内存分区域
每个代中内存 再分为多个大小相同的区,按区收集垃圾,能减少碎片整理时间
3.执行分阶段
垃圾回收过程分为几个不同的阶段,能减小系统暂停时间
比如先标记垃圾对象,标记完后,发现暂停时间已经比较长了,那就先暂停执行GC,让工作线程先工作,等一段时间后,在执行下一阶段的GC流程
具体垃圾收集器,都是实现了上面某些算法
1.serial gc
串行收集器,单线程执行,追求低停顿时间,用于新生代收集
2.parnew gc
多线程版本的串行收集器,多线程执行,追求低停顿时间,用于新生代收集
3.parallel scavenge gc
并行收集器,多线程执行,追求高吞吐量,用于新生代收集
4.serial old gc
串行老生代收集器,单线程执行,追求低停顿时间,用于老生代收集
5.parallel old gc
并行老生代收集器,多线程执行,追求高吞吐量,用于老生代收集
6.cms gc
并发收集器,多线程执行,追求低停顿时间,用于老生代收集
7.g1 gc
g1收集器,多线程执行,追求低停顿时间,也追求高吞吐量,有点实时、高吞吐量的意思,既用于新生代收集,也用于老生代收集
这个GC 兼顾了停顿时间和吞吐量,是未来GC的方向,目前这个GC稳定性据说还有待验证,如果将来稳定了,大伙都用这个GC就好了
JVM参数和GC收集器的对应关系
UseSerialGC
虚拟机运行在Client 模式下的默认值,打开此开关后,使用Serial + Serial Old 的收集器组合进行内存回收
UseParNewGC
打开此开关后,使用ParNew + Serial Old 的收集器组合进行内存回收
UseConcMarkSweepGC
打开此开关后,使用ParNew + CMS + Serial Old 的收集器组合进行内存回收。
Serial Old 收集器将作为CMS 收集器出现Concurrent Mode Failure失败后的后备收集器使用
UseParallelGC
虚拟机运行在Server 模式下的默认值,打开此开关后,使用ParallelScavenge + Serial Old(PS MarkSweep)的收集器组合进行内存回收
UseParallelOldGC
打开此开关后,使用Parallel Scavenge + Parallel Old 的收集器组合进行内存回收
UseG1GC
打开此开关后,使用G1回收器 回收新生代和老生代内存
注意:指定GC回收器时 一般需要为新生代和老生代分别指定GC回收器,不过有些参数有默认行为,指定了一个参数,就相当于同时指定了 新/老 GC
默认情况下,老生代GC回收器会对pem space(永久代)进行回收,也就是发生full gc(major gc)时,会同时收集老生代和持久代的垃圾对象
GC优化主要针对垃圾回收这些具体算法来进行的
1.不管使用哪种GC,都会导致系统停止响应(stop-the-world),只是时间长短而已,要考虑响应时间和不丢包(UDP)
2.多核CPU尽量使用多线程GC,来减少停顿时间及提高吞吐量
3.吞吐量和停顿时间,一般是个矛盾体,追求吞吐量大,停顿时间就会长;追求停顿时间,吞吐量就小;看应用追求哪个指标,选择相应的算法
内存优化
不仅包括GC优化,也包括内存参数优化
1.内存性能参数优化,包括堆大小等等参数
2.GC优化
JVM优化
1.CPU
2.内存
3.IO
java性能调优
JVM性能分析(找瓶颈\找BUG)
JVM优化
代码优化/bug
操作系统优化
硬件(这个很少涉及)
java gc 总结的更多相关文章
- 详解Java GC的工作原理+Minor GC、FullGC
详解Java GC的工作原理+Minor GC.FullGC 引用地址:http://www.blogjava.net/ldwblog/archive/2013/07/24/401919.html J ...
- Java GC回收机制
优秀Java程序员必须了解的GC工作原理 一个优秀的Java程序员必须了解GC的工作原理.如何优化GC的性能.如何与GC进行有限的交互,因为有一些应用程序对性能要求较高,例如嵌入式系统.实时系统等,只 ...
- JAVA GC 简单总结
GC分代 GC的英文全拼是Garbage Collection,意思是垃圾收集. Java 将堆内存分为三代来管理: - 年轻代 (Young Generation) - 年老代 (Old Gener ...
- Java GC收集器配置说明
根据Java GC收集器具体分类,我们可以看出JVM根据需求不同提供了三种选择:串行收集器.并行收集器.并发收集器. 串行收集器只适用于小数据量的情况,我们主要了解一下并行收集器和并发收集器.默认情况 ...
- java gc的工作原理、如何优化GC的性能、如何和GC进行有效的交互
java gc的工作原理.如何优化GC的性能.如何和GC进行有效的交互 一个优秀的Java 程序员必须了解GC 的工作原理.如何优化GC的性能.如何和GC进行有效的交互,因为有一些应用程序对性能要求较 ...
- Java GC系列(4):垃圾回收监视和分析
本文由 ImportNew - lomoxy 翻译自 javapapers. 目录 垃圾回收介绍 垃圾回收是如何工作的? 垃圾回收的类别 垃圾回收监视和分析 在这个Java GC系列教程中,让我们学习 ...
- 应用JConsole学习Java GC
应用JConsole学习Java GC 关于Java GC的知识,好多地方都讲了很多,今天我用JConsole来学习一下Java GC的原理. GC原理 在我的上一篇中介绍了Java运行时数据区,在了 ...
- 成为Java GC专家(3)—如何优化Java垃圾回收机制
为什么需要优化GC 或者说的更确切一些,对于基于Java的服务,是否有必要优化GC?应该说,对于所有的基于Java的服务,并不总是需要进行GC优化,但前提是所运行的基于Java的系统,包含了如下参数或 ...
- Java GC 概念摘要
很长时间,我想Java的GC做一个小小的总结,他有没有时间.根据最近看了java paper向上java gc文章,我觉得好,读读.顺便说一下,总结下. java paper的GC文章地址,里面有非常 ...
- Java GC 专家系列3:GC调优实践
本篇是”GC专家系列“的第三篇.在第一篇理解Java垃圾回收中我们学习了几种不同的GC算法的处理过程,GC的工作方式,新生代与老年代的区别.所以,你应该已经了解了JDK 7中的5种GC类型,以及每种G ...
随机推荐
- C语言:大数求和
点击获取题目 1410: [蓝桥杯]高精度加法 时间限制: 1 Sec 内存限制: 256 MB提交: 28 解决: 20[状态] [提交] [命题人:外部导入] 题目描述 输入两个整数a和b,输 ...
- consul配置
参考:https://blog.csdn.net/achenyuan/article/details/80389410 gcp: consul安装目录:/usr/local/bin/consul co ...
- 吴裕雄--天生自然 JAVASCRIPT开发学习:switch 语句
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- (递归)Hanoi Tower
#include<stdio.h>void move(int n,char a,char b){ printf("将第%d个盘子从%c移动到%c\n",n,a,b); ...
- Vue 指令 v-text v-html
有三个指令达到的效果是一样的 {{JS表达式}} 差值表达式 v-text="JS表达式" v-html="JS表达式" //会自动解析tag js表达式 ...
- you-get使用
1.pip install you-get 2.如果出错 查看错误bug you-get http://www.iqiyi.com/v_19rrnqxz7k.html#vfrm=2-4-0-1 ...
- Linux误删所有内核,恢复内核的解决办法
前言 我用df -h命令查看磁盘使用情况的时候发现,系统根目录空间已经比较小了,于是我就使用clean命令对系统内核进行清理,一不小心,就把所有的内核删除了,你很有可能也是我的这种经历,非常的崩溃.好 ...
- Redis的学习之路
应用场景 1.作为缓存使用 (1)原始业务功能设计 秒杀 双十一.618 排队购票 (2)运营平台察觉到突发式高频访问热点 突发式热点新闻 (3)高频复杂的统计数据 在线直播 投票排行榜 2.附加功 ...
- linux_ssh用户枚举猜测
新建一个用户名txt文档,写入常用的用户名 msfconsole use auxiliary/scanner/ssh/ssh_enumusers3
- 吴裕雄--天生自然MySQL学习笔记:MySQL 元数据
你可能想知道MySQL以下三种信息: 查询结果信息: SELECT, UPDATE 或 DELETE语句影响的记录数. 数据库和数据表的信息: 包含了数据库及数据表的结构信息. MySQL服务器信息: ...