【JVM 2,最经典的HashMap图文详解
GC在 HotSpot VM 5.0里有四种:
~incremental (sometimes called train) low pause collector~已被废弃,不在介绍
类别 | serial collector |
parallel collector ( throughput collector ) |
concurrent collector (concurrent low pause collector) |
介绍 |
单线程收集器 使用单线程去完成所有的GC工作,没有线程间的通信,这种方式会相对高效 |
并行收集器 使用多线程的方式,利用CUP来提高GC的效率,主要以到达一定的吞吐量为目标 |
并发收集器 使用多线程的方式,利用多CPU来提高GC的效率,并发完成大部分工作,使得GC pause短 |
试用场景 | 单处理器机器且没有pause time的要求 |
适用于科学技术和后台处理有中大规模数据集的应用 且运行在多处理器上,关注吞吐量(throughput) |
适合中规模/大规模数据集大小的应用,应用服务器,电信领域。关注response time,而不是throughput |
使用 |
Client模式下默认 可使用 可用-XX:+UseSerialGC强制使用 优点:对server应用没什么优点 缺点:慢,不能充分发挥硬件资源 |
Server模式下默认 --YGC:PS FGC:Parallel MSC 可用-XX:+UseParallelGC 或-XX:+UseParallelOldGC强制指定 --ParallelGC代表FGC为Parallel MSC --ParallelOldGC代表FGC为Parallel Compacting 优点:高效 缺点:当heap变大后,造成的暂停时间会变得比较长 |
可用-XX:+
|
内存回收触发 |
YGC 包括RMI等的定时触发 |
YGC eden空间不足 FGC old空间不足 perm空间不足 显示调用System.gc() ,包括RMI等的定时触发 |
YGC 调用了System.gc. |
内存回收触发 时发生了什么 |
YGC 中加载的class的信息 |
YGC class信息,并进行压缩 class信息,并进行部分压缩 |
YGC 加载的class信息 |
细节参数 |
可用-XX:+UseSerialGC强制使用 -XX:SurvivorRatio=x,控制eden/s0/s1的大小 -XX:MaxTenuringThreshold,用于控制对象在新生代存活的最大次数 -XX:PretenureSizeThreshold=x,控制超过多大的字节的对象就在old分配. |
-XX:SurvivorRatio=x,控制eden/s0/s1的大小 -XX:MaxTenuringThreshold,用于控制对象在新生代存活的最大次数 -XX:UseAdaptiveSizePolicy 去掉YGC后动态调整eden from已经tenuringthreshold的动作 -XX:ParallelGCThreads 设置并行的线程数 |
XX:CMSInitiatingOccupancyFraction 设置old gen使用到达多少比率时触发 -XX:CMSInitiatingPermOccupancyFraction,设置Perm Gen使用到达多少比率时触发 -XX:+UseCMSInitiatingOccupancyOnly禁止hostspot自行触发CMS GC |
注:
throughput collector与concurrent low pause collector的区别是throughput collector只在young area使用使用多线程,而concurrent low pause collector则在tenured generation也使用多线程。
根据官方文档,他们俩个需要在多CPU的情况下,才能发挥作用。在一个CPU的情况下,会不如默认的serial collector,因为线程管理需要耗费CPU资源。而在两个CPU的情况下,也提高不大。只是在更多CPU的情况下,才会有所提高。当然 concurrent low pause collector有一种模式可以在CPU较少的机器上,提供尽可能少的停顿的模式,见CMS GC Incremental mode。
当要使用throughput collector时,在java opt里加上-XX:+UseParallelGC,启动throughput collector收集。也可加上-XX:ParallelGCThreads=来改变线程数。还有两个参数 -XX:MaxGCPauseMillis=和 -XX:GCTimeRatio=,MaxGCPauseMillis=用来控制最大暂停时间,而-XX: GCTimeRatio可以提高GC说占CPU的比,以最大话的减小heap。
二、CMS GC Incremental mode
=============================
当要使用 concurrent low pause collector时,在java的opt里加上 -XX:+UseConcMarkSweepGC。concurrent low pause collector还有一种为CPU少的机器准备的模式,叫Incremental mode。这种模式使用一个CPU来在程序运行的过程中GC,只用很少的时间暂停程序,检查对象存活。
在Incremental mode里,每个收集过程中,会暂停两次,第二次略长。第一次用来,简单从root查询存活对象。第二次用来,详细检查存活对象。整个过程如下:
* stop all application threads; do the initial mark; resume all application threads(第一次暂停,初始话标记)* do the concurrent mark (uses one procesor for the concurrent work)(运行是标记)* do the concurrent pre-clean (uses one processor for the concurrent work)(准备清理)* stop all application threads; do the remark; resume all application threads(第二次暂停,标记,检查)* do the concurrent sweep (uses one processor for the concurrent work)(运行过程中清理)* do the concurrent reset (uses one processor for the concurrent work)(复原)
当要使用Incremental mode时,需要使用以下几个变量:
-XX:+CMSIncrementalMode default: disabled 启动i-CMS模式(must with -XX:+UseConcMarkSweepGC)-XX:+CMSIncrementalPacing default: disabled 提供自动校正功能-XX:CMSIncrementalDutyCycle=<N> default: 50 启动CMS的上线-XX:CMSIncrementalDutyCycleMin=<N> default: 10 启动CMS的下线-XX:CMSIncrementalSafetyFactor=<N> default: 10 用来计算循环次数-XX:CMSIncrementalOffset=<N> default: 0 最小循环次数(This is the percentage (0-100) by which the incremental mode duty cycle is shifted to the right within the period between minor collections.)-XX:CMSExpAvgFactor=<N> default: 25 提供一个指导收集数
SUN推荐的使用参数是:
-XX:+UseConcMarkSweepGC \-XX:+CMSIncrementalMode \-XX:+CMSIncrementalPacing \-XX:CMSIncrementalDutyCycleMin=0 \-XX:CMSIncrementalDutyCycle=10 \-XX:+PrintGC Details \-XX:+PrintGCTimeStamps \-XX:-TraceClassUnloading# 本次面试答案,以及收集到的大厂必问面试题分享:![字节跳动超高难度三面java程序员面经,大厂的面试都这么变态吗?](https://img-blog.csdnimg.cn/img_convert/8c936ac58ee51e214c00ca47a126b0a3.png)s \-XX:-TraceClassUnloading# 本次面试答案,以及收集到的大厂必问面试题分享:[外链图片转存中...(img-q0O7tWiC-1628507627209)]**[资料领取方式:戳这里即可免费下载](https://gitee.com/vip204888/java-p7)**
【JVM 2,最经典的HashMap图文详解相关推荐
- 最经典的HashMap图文详解,干货满满!
前言 我们说 Kafka 是一个消息队列,其实更加确切的说:是 Broker 这个核心部件.为何这么说?你会发现我们可以通过控制台. Java 代码. C++ 代码.甚至是 Socket 向 Brok ...
- 大牛深入讲解!最经典的HashMap图文详解
栈和队列部分(10) 设计一个有getMin功能的栈(士★☆☆☆) 由两个栈组成的队列(尉★★☆☆) 如何仅用递归函数和栈操作逆序一个栈(尉★★☆☆) 猫狗队列(士★☆☆☆) 用一个栈实现另一个栈的排 ...
- 如何将3dmax软件的界面设置成经典模式?-图文详解
据3dmax软件的版本不同界面也会有所改变,很多朋友还是习惯于经典模式.那你知道如何将3dmax软件的界面设置成经典模式吗?本文小编将和大家分享将3dmax软件的界面设置成经典模式的方法与步骤,感兴趣 ...
- 面渣逆袭:Redis连环五十二问,图文详解,这下面试稳了
大家好,我是老三,面渣逆袭系列继续,这节我们来搞定Redis--不会有人假期玩去了吧?不会吧? 基础 1.说说什么是Redis? Redis是一种基于键值对(key-value)的NoSQL数据库. ...
- 一文带你轻松搞懂事务隔离级别(图文详解)
本文由 SnailClimb 和读者 BugSpeak 共同完成. 事务隔离级别(图文详解) 什么是事务? 事务是逻辑上的一组操作,要么都执行,要么都不执行. 事务最经典也经常被拿出来说例子就是转账了 ...
- qt on android qml,Qt on Android: Qt Quick 之 Hello World 图文详解
在上一篇文章,<Qt on Android:QML 语言基础>中,我们介绍了 QML 语言的语法,在最后我们遗留了一些问题没有展开,这篇呢,我们就正式开始撰写 Qt Quick 程序,而那 ...
- Cocos2d-x win7 + vs2010 配置图文详解(亲测)
Cocos2d-x win7 + vs2010 配置图文详解(亲测) 下载最新版的cocos2d-x.打开浏览器,输入cocos2d-x.org,然后选择Download,本教程写作时最新版本为coc ...
- java 一个大事务下的新增、修改、查询_一文带你轻松搞懂事务隔离级别(图文详解)...
点击上方"linkoffer", 选择关注公众号高薪职位第一时间送达 本文由 SnailClimb 和读者 BugSpeak 共同完成. 事务隔离级别(图文详解) 什么是事务? 事 ...
- JDK安装和环境变量配置(Win10图文详解)
JDK的安装和环境变量配置(Win10,图文详解) 操作系统 JDK的安装 JDK下载 系统环境变量配置 验证JDK和环境变量配置 Eclipse安装 Java小白入门项目代码参考 结语 操作系统 W ...
最新文章
- ViT作者、谷歌大脑研究员翟晓华:大规模视觉表征学习
- Linux统计文件行数
- 计算机网络:单播,多播
- jax-ws cxf_走向REST:将Tomcat嵌入Spring和JAX-RS(Apache CXF)
- php 设置统一处理错误,统一的PHP错误处理理论
- ajax实现上传文件
- 关于怎么获取jsp的web站点的目录问题
- 《高频交易》读书笔记
- 太赞了,Intellij IDEA竟然把Java8的数据流问题这么完美的解决掉了!
- mfc响应鼠标前进后退按键_诚意升级,商务大鼠再临:雷柏MT750S多模无线激光鼠标评测...
- 减小app大小的方法——iOS开发用ImageOptim压缩png图片
- 带Fn的键盘linux能用吗,实用技巧:如何更有效率的使用Linux键盘
- 每周论文精读04——A Survey on 3D Hand Pose Estimation: Cameras, Methods, and Datasets
- VueX 以及axios
- HTML元素 span,div,p,h,a盒子模型中padding属性的演示和理解
- 一文解密 Netflix 的快速事件通知系统是如何工作的
- 粒子寻优算法PSO学习笔记
- 苹果电脑系统还原出现服务器,苹果电脑恢复出厂设置【解答方法】
- 易协软件:workflow与BPM区别
- 一堂如何提高代码质量的培训课
热门文章
- Flutter实战一Flutter聊天应用(十一)
- Dart入门—库、泛型与异常
- c语言 strupr,C语言 strupr()用法及代码示例
- java语言程序设计基础篇课后答案_《Java语言程序设计:基础篇》课后复习题答案-第十五章.pdf...
- android弹窗不能手动关闭_Android弹窗的实现及相关bug
- OpenAI 发布模型实现自动定理证明,妈妈再也不用担心我的数学?
- 一个月面试近 20 家,拿下阿里 Offer!
- 稳站大屏 AIoT 时代之巅,创维 Swaiot 生态品牌实现全面布局!
- 简直不要太硬了!一文带你彻底理解文件系统 | 原力计划
- 华为百度美团驰援抗击疫情;自由软件基金会建议开源 Windows 7;印度超越美国成第二大智能手机市场 | 极客头条...