深入理解JVM-垃圾回收器
看完《深入理解JVM》,结合网上资料后根据跟人理解整理出的简洁版,主要关注是什么, 怎么做到的,特点等,没有进入深入剖析,旨在快速了解,具体应用时个人再根据具体点去进行深入。欢迎留言讨论!
是什么?
垃圾回收器是垃圾回收算法的包装,可以在JVM中设置需要使用的垃圾回收器;
怎么做?
Serial收集器:
单线程进行垃圾回收, 执行回收过程中,程序会暂停。
特点:简单高效,适用于单个CPU场景。常用于新生代回收;
SerialOld: Serial的老年代版本;用于老年代回收;
parnew收集器:
Serial 的多线程版本,回收过程中,程序也会暂停;
特点:适合多核场景,用于新生代回收,可以与CMS配合;
Parallel收集器:
并行回收,程序会暂停,可控制吞吐量;
特点:吞吐量优先,更关注可控制的吞吐量,用于新生代回收;
ParallelOld收集器:paraller老年代版本;
parallel+parallelOld 为吞吐量优先组合,当应用程序运行在具有多个CPU上,对暂停时间没有特别高的要求时,即程序主要在后台进行计算,而不需要与用户进行太多交互;
例如,那些执行批量处理、订单处理、工资支付、科学计算的应用程序;
cms收集器:
采用标记清除算法,多线程回收,仅用于老年代;
运作流程:初始标记、并发标记、重新标记、并发清除
在并发标记、并发清除阶段可以多线程并行进行;
特点:并发收集,低停顿,以回收最短停顿时间为目标,适用于常见B/S场景;
缺点:
需要内存大,影响吞吐;
无法及时清理浮动垃圾;
产生大量内存碎片;
解决办法:
通过 -XX:CMSInitiatingOccupancyFraction设置预留空间,以减少因为浮动垃圾,导致内存空间无法满足导致的fullgc;
通过 -XX:+UseCMSCompactAtFullCollection开启碎片合并整理;
配合-XX:+CMSFullGCsBeforeCompaction设置执行多少次不压缩的fullgc后进行一次整理压缩;
G1收集器:
1.7版本推出,多线程处理,可管理整个堆内存的垃圾回收:
运作流程:初始标记、并发标记、最终标记、筛选回收
特点:
结合多种垃圾算法,空间整合,不产生碎片
低停顿的同时实现高吞吐量
场景:面向服务端应用,针对具有大内存、多处理器的机器;
最主要的应用是为需要低GC延迟,并具有大堆的应用程序提供解决方案;
如:在堆大小约6GB或更大时,可预测的暂停时间可以低于0.5秒;
常用参数:
-XX:+UseSerialGC:在新生代和老年代使用串行收集器
-XX:+UseParNewGC:在新生代使用并行收集器
-XX:+UseParallelGC :新生代使用并行回收收集器,更加关注吞吐量
-XX:+UseParallelOldGC:老年代使用并行回收收集器
-XX:ParallelGCThreads:设置用于垃圾回收的线程数
-XX:+UseConcMarkSweepGC:新生代使用并行收集器,老年代使用CMS+串行收集器
-XX:ParallelCMSThreads:设定CMS的线程数量
-XX:+UseG1GC:启用G1垃圾回收器
-XX:InitiatingHeapOccupancyPercent:当整个Java堆的占用率达到参数值时,开始并发标记阶段;默认为45;
-XX:MaxGCPauseMillis:为G1设置暂停时间目标,默认值为200毫秒;
-XX:G1HeapRegionSize:设置每个Region大小,范围1MB到32MB;目标是在最小Java堆时可以拥有约2048个Region;
一个Java交流平台分享给你们,让你在实践中积累经验掌握原理。如果你想拿高薪,想突破瓶颈,想跟别人竞争能取得优势的,想进BAT但是有担心面试不过的,可以加我的Java学习交流群:642830685
注:加群要求
1、大学学习的是Java相关专业,毕业后面试受挫,找不到对口工作
2、在公司待久了,现在过得很安逸,但跳槽时面试碰壁。需要在短时间内进修、跳槽拿高薪的
3、参加过线下培训后,知识点掌握不够深刻,就业困难,想继续深造
4、已经在Java相关部门上班的在职人员,对自身职业规划不清晰,混日子的
5、有一定的C语言基础,接触过java开发,想转行的
深入理解JVM-垃圾回收器的更多相关文章
- Jvm垃圾回收器(算法篇)
在<Jvm垃圾回收器(基础篇)>中我们主要学习了判断对象是否存活还是死亡?两种基础的垃圾回收算法:引用计数法.可达性分析算法.以及Java引用的4种分类:强引用.软引用.弱引用.虚引用.和 ...
- JVM 垃圾回收器工作原理及使用实例介绍(转载自IBM),直接复制粘贴,需要原文戳链接
原文 https://www.ibm.com/developerworks/cn/java/j-lo-JVMGarbageCollection/ 再插一个关于线程和进程上下文,待判断 http://b ...
- Jvm垃圾回收器(终结篇)
知识回顾: 第一篇<Jvm垃圾回收器(基础篇)>主要讲述了判断对象的生死?两种基础判断对象生死的算法.引用计数法.可达性分析算法,方法区的回收.在第二篇<Jvm垃圾回收器(算法篇)& ...
- JVM基础系列第9讲:JVM垃圾回收器
前面文章中,我们介绍了 Java 虚拟机的内存结构,Java 虚拟机的垃圾回收机制,那么这篇文章我们说说具体执行垃圾回收的垃圾回收器. 总的来说,Java 虚拟机的垃圾回收器可以分为四大类别:串行回收 ...
- 【转】Java学习---垃圾回收算法与 JVM 垃圾回收器综述
[原文]https://www.toutiao.com/i6593931841462338062/ 垃圾回收算法与 JVM 垃圾回收器综述 我们常说的垃圾回收算法可以分为两部分:对象的查找算法与真正的 ...
- 垃圾回收算法与 JVM 垃圾回收器综述(转)
垃圾回收算法与 JVM 垃圾回收器综述 我们常说的垃圾回收算法可以分为两部分:对象的查找算法与真正的回收方法.不同回收器的实现细节各有不同,但总的来说基本所有的回收器都会关注如下两个方面:找出所有的存 ...
- JVM垃圾回收器原理及使用介绍
JVM垃圾回收器原理及使用介绍 垃圾收集基础 引用计数法(Reference Counting) 标记-清除算法(Mark-Sweep) 复制算法(Copying) 标记-压缩算法(Mark-Comp ...
- Hotspot JVM垃圾回收器
前两篇<JVM入门——运行时数据区><JVM常见垃圾回收算法>所提到的实际上JVM规范以及常用的垃圾回收算法,具体的JVM实现实际上不止一种,有JRockit.J9等待,当然最 ...
- jvm垃圾回收器介绍
上篇文章中我们讨论了jvm的内存区域,这篇文章我们来讨论针对的内存区域的垃圾回收机制. 其实针对垃圾回收我们通常考虑三个问题:1.哪些内存需要回收?2.什么时候回收?3.如何回收?下面我们针对这三个问 ...
- JVM垃圾回收器前瞻
垃圾回收器的新发展 GC仍然处于飞速发展之中,目前的默认选项G1 GC在不断的进行改进,很多我们原来认为的缺点,例如串行的Full GC.Card Table扫描的低效等,都已经被大幅改进,例如, ...
随机推荐
- python 随机数详细使用,推到以及字符串,双色球小程序
#随机数的使用import random #导入randomrandom.randint(0,9)#制定随机数0到9i=random.sample(range(1,34),6)#输出6个随机数,范围是 ...
- python中super().__init__和类名.__init__的区别
super().__init__相对于类名.__init__,在单继承上用法基本无差 但在多继承上有区别,super方法能保证每个父类的方法只会执行一次,而使用类名的方法会导致方法被执行多次 多继承时 ...
- Consul zookeeper etcd eureka
这里就平时经常用到的服务发现的产品进行下特性的对比,首先看下结论: Feature Consul zookeeper etcd eureka 服务健康检查 服务状态,内存,硬盘等 (弱)长连接,kee ...
- 191016Django基础
一.简单的webserver框架 from wsgiref.simple_server import make_server def login(req): #view函数 print(req[&qu ...
- 五一 DAY 7
五一 DAY 7 P1514 引水入城 P1311 选择客栈 题解: P1315 观光公交 题解: 设 wait i 为最晚到达的旅客 arrive i 为到达i 的时刻 arrive i =max ...
- scp 传输命令
scp -r 文件名 用户名@地址:路径 -r 代表上传文件夹
- 六、Java中一个key存多个value的MultiValueMap,一键多值
一.MultiValueMap介绍,与map,HashMap相差不多 添加一个Key对应一个Value的:void add(K, V); 添加一个Key对应多个Value的:void add(K, L ...
- oracle系统视图V$
--数据字典表select * from v$fixed_table;select * from v$fixed_view_definition;select * from dictionary; - ...
- oracle的表分析
对一个schema下所有对象的进行统计分析 dbms_stats.gather_schema_stats(ownname=> 'trade',estimate_percent => dbm ...
- harbor仓库安装
https://6xyun.cn/article/50 环境: 192.168.0.65 harbor .docker 一.安装相关依赖 .安装Docker Docker 使用离线版docker-ce ...