JVM的内存结构,Eden和Survivor比例;JVM中一次完整的GC流程,对象如何晋升到老年代,说说你知道的几种主要的JVM参数;CMS 常见参数解析;.你知道哪几种垃圾收集器,各自的优缺点
47.JVM的内存结构,Eden和Survivor比例
49.JVM中一次完整的GC流程是怎样的,对象如何晋升到老年代,说说你知道的几种主要的JVM参数
50.-XX:+CMSScavengeBeforeRemark
51.JVM调优——之CMS 常见参数解析
52.你知道哪几种垃圾收集器,各自的优缺点,重点讲下cms和G1,包括原理,流程,优缺点
47.JVM的内存结构,Eden和Survivor比例
eden 和 survior 是按8比1分配的
http://blog.csdn.net/lojze_ly/article/details/49456255
49.JVM中一次完整的GC流程是怎样的,对象如何晋升到老年代,说说你知道的几种主要的JVM参数
对象诞生即新生代->eden,在进行minor gc过程中,如果依旧存活,移动到from,变成Survivor,进行标记代数,如此检查一定次数后,晋升为老年代,
http://www.cnblogs.com/redcreen/archive/2011/05/04/2037056.html
http://ifeve.com/useful-jvm-flags/
https://wangkang007.gitbooks.io/jvm/content/jvmcan_shu_xiang_jie.html
50.-XX:+CMSScavengeBeforeRemark
https://www.zhihu.com/question/61090975
51.JVM调优——之CMS 常见参数解析
最近在学习使用CMS这个GC,这里记录下常用的参数。
- UseCMSCompactAtFullCollection 与 CMSFullGCsBeforeCompaction
有一点需要注意的是:CMS并发GC不是“full GC”。HotSpot VM里对concurrent collection和full collection有明确的区分。所有带有“FullCollection”字样的VM参数都是跟真正的full GC相关,而跟CMS并发GC无关的。
CMSFullGCsBeforeCompaction这个参数在HotSpot VM里是这样声明的:
product(bool, UseCMSCompactAtFullCollection, true, \"Use mark sweep compact at full collections") \\
product(uintx, CMSFullGCsBeforeCompaction, 0, \"Number of CMS full collection done before compaction if > 0") \
然后这样使用的:
*should_compact =UseCMSCompactAtFullCollection &&((_full_gcs_since_conc_gc >= CMSFullGCsBeforeCompaction) ||GCCause::is_user_requested_gc(gch->gc_cause()) ||gch->incremental_collection_will_fail(true /* consult_young */));
CMS GC要决定是否在full GC时做压缩,会依赖几个条件。其中,
第一种条件,UseCMSCompactAtFullCollection 与 CMSFullGCsBeforeCompaction 是搭配使用的;前者目前默认就是true了,也就是关键在后者上。
第二种条件是用户调用了System.gc(),而且DisableExplicitGC没有开启。
第三种条件是young gen报告接下来如果做增量收集会失败;简单来说也就是young gen预计old gen没有足够空间来容纳下次young GC晋升的对象。
上述三种条件的任意一种成立都会让CMS决定这次做full GC时要做压缩。
CMSFullGCsBeforeCompaction 说的是,在上一次CMS并发GC执行过后,到底还要再执行多少次full GC才会做压缩。默认是0,也就是在默认配置下每次CMS GC顶不住了而要转入full GC的时候都会做压缩。 把CMSFullGCsBeforeCompaction配置为10,就会让上面说的第一个条件变成每隔10次真正的full GC才做一次压缩(而不是每10次CMS并发GC就做一次压缩,目前VM里没有这样的参数)。这会使full GC更少做压缩,也就更容易使CMS的old gen受碎片化问题的困扰。 本来这个参数就是用来配置降低full GC压缩的频率,以期减少某些full GC的暂停时间。CMS回退到full GC时用的算法是mark-sweep-compact,但compaction是可选的,不做的话碎片化会严重些但这次full GC的暂停时间会短些;这是个取舍。
- -XX:CMSInitiatingOccupancyFraction=70 和-XX:+UseCMSInitiatingOccupancyOnly
这两个设置一般配合使用,一般用于『降低CMS GC频率或者增加频率、减少GC时长』的需求
-XX:CMSInitiatingOccupancyFraction=70 是指设定CMS在对内存占用率达到70%的时候开始GC(因为CMS会有浮动垃圾,所以一般都较早启动GC);
-XX:+UseCMSInitiatingOccupancyOnly 只是用设定的回收阈值(上面指定的70%),如果不指定,JVM仅在第一次使用设定值,后续则自动调整.
- -XX:+CMSScavengeBeforeRemark
在CMS GC前启动一次ygc,目的在于减少old gen对ygc gen的引用,降低remark时的开销-----一般CMS的GC耗时 80%都在remark阶段
52.你知道哪几种垃圾收集器,各自的优缺点,重点讲下cms和G1,包括原理,流程,优缺点
Serial、parNew、ParallelScavenge、SerialOld、ParallelOld、CMS、G1
https://wangkang007.gitbooks.io/jvm/content/chapter1.html
JVM的内存结构,Eden和Survivor比例;JVM中一次完整的GC流程,对象如何晋升到老年代,说说你知道的几种主要的JVM参数;CMS 常见参数解析;.你知道哪几种垃圾收集器,各自的优缺点相关推荐
- JVM 中一次完整的 GC 流程是什么样子的,对象如何晋升到老年代,
一次完整的gc过程 gc是通过垃圾收集器来实现的,现代垃圾收集器大部分都是基于分代收集理论设计的,也就是将对象划分为新生代,老年代.其中新生代分为Eden区和两块Survivor区,比例为8:1:1. ...
- 深入理解JVM—满足什么条件的对象才会进入老年代?
我们可能知道jvm调优,但是jvm调优到底是为了调整什么呢?或者说是优化什么?可能并不是特别清楚. 其实很简单,就是为了减少STW(stop the world),什么会造成这一现象呢,学过gc的应该 ...
- 一文搞定JVM的内存结构
目录 1.简介 2.程序计数器(PC寄存器) 2.1 功能演示 2.2 关于PC的面试题 3.虚拟机栈 3.1 初识虚拟机栈 3.2 栈帧的内部结构 3.2.1 局部变量表 3.2.2 操作数栈 3. ...
- JVM(一)JVM虚拟机内存结构 和 JAVA内存模型(JMM)
本文转自:浅析java内存模型--JMM(Java Memory Model) - 路易小七 - 博客园,尊重作者,转载请注明出处~ JVM虚拟机内存结构 和 JAVA内存模型 是两个不同的概念 JV ...
- JVM之内存结构图文详解
点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 对于开发人员来说,如果不了解Java的JVM,那真的是很难写得一手好代码,很难查得一手好bu ...
- JVM之内存结构详解
对于开发人员来说,如果不了解Java的JVM,那真的是很难写得一手好代码,很难查得一手好bug.同时,JVM也是面试环节的中重灾区.今天开始,<JVM详解>系列开启,带大家深入了解JVM相 ...
- 一文解析JVM的内存结构,身为程序员还不弄懂JVM怎么行
欢迎关注专栏:Java架构技术进阶.里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦.微信公众号:慕容千语的架构笔记.欢迎关注一起进步. 前言 Jvm的内存结构是由<jav ...
- jvm虚拟机内存结构_JVM体系结构101:了解您的虚拟机
jvm虚拟机内存结构 Java虚拟机(JVM)架构和Java字节码101的初学者速成班 Java应用程序无处不在,它们在我们的手机,平板电脑和计算机上. 在许多编程语言中,这意味着多次编译代码以使其在 ...
- JVM详解【三】JVM的内存结构
JVM的内存区域 JVM的内存区域分为线程私有区域(程序计数器.虚拟机栈.本地方法区).线程共享区域(堆.方法区)和直接内存,如图所示 线程私有区域的生命周期与线程相同,随线程启动而创建,随线 ...
最新文章
- Linux Web服务器网站故障分析常用的命令
- call(),apply()和bind()的详解使用:
- android 怎么判断activity 从哪里启动的
- Sublime 2 配置
- 单例模式源码分析(jdk+spring+mybatis)
- iOS 开发--github的demo
- solidity字符串拼接
- linux中fork()函数具体解释(原创!!实例解说)
- 微信 8.0.1又来了!修复问题,终于能显示“在线状态”了
- 8.3 折特惠票仅剩 5 天!「2019 嵌入式智能国际大会」全日程大公开!
- SegmentFault 巨献 1024 程序猿游戏「红岸的呼唤」第四天任务攻略
- 不透水面提取操作实现
- C 语言中 scanf() 的用法
- 常见算法在实际项目种的应用
- 中科院计算机专业,中科院计算所博士平均年薪都超过50万了,计算机专业真是可以无脑选的那种...
- 2.63-将下面的C函数代码补充完整。函数srl用算术右移(由值xsra给出)来完成逻辑右移,后面的其他操作不包括右移或者除法。
- 微信输出日志在电脑桌面
- 砥砺前行!华为构建开放共赢云生态
- 压在心底慢慢体会__珍藏的句子
- 正点原子第四期环境搭建
热门文章
- 故障转移集群无法连接到节点_Redis集群以及自动故障转移测试
- 《集体智慧编程》第8章
- 4.Java中的关键字和标识符
- 8.Hadoop的学习(Hadoop的配置--搭建完全分布式)
- 万字长文带你了解蚁群算法及求解复杂约束问题【源码实现】
- OpenCASCADE:形状愈合之修复工具
- boost::shared_mutex相关的测试程序
- boost::hana::concat用法的测试程序
- GDCM:gdcm::Reader的测试程序
- boost::allocator_value_type的实例