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,这里记录下常用的参数。

  1. 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的暂停时间会短些;这是个取舍。

  1. -XX:CMSInitiatingOccupancyFraction=70 和-XX:+UseCMSInitiatingOccupancyOnly
    这两个设置一般配合使用,一般用于『降低CMS GC频率或者增加频率、减少GC时长』的需求

-XX:CMSInitiatingOccupancyFraction=70 是指设定CMS在对内存占用率达到70%的时候开始GC(因为CMS会有浮动垃圾,所以一般都较早启动GC);

-XX:+UseCMSInitiatingOccupancyOnly 只是用设定的回收阈值(上面指定的70%),如果不指定,JVM仅在第一次使用设定值,后续则自动调整.

  1. -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 常见参数解析;.你知道哪几种垃圾收集器,各自的优缺点相关推荐

  1. JVM 中一次完整的 GC 流程是什么样子的,对象如何晋升到老年代,

    一次完整的gc过程 gc是通过垃圾收集器来实现的,现代垃圾收集器大部分都是基于分代收集理论设计的,也就是将对象划分为新生代,老年代.其中新生代分为Eden区和两块Survivor区,比例为8:1:1. ...

  2. 深入理解JVM—满足什么条件的对象才会进入老年代?

    我们可能知道jvm调优,但是jvm调优到底是为了调整什么呢?或者说是优化什么?可能并不是特别清楚. 其实很简单,就是为了减少STW(stop the world),什么会造成这一现象呢,学过gc的应该 ...

  3. 一文搞定JVM的内存结构

    目录 1.简介 2.程序计数器(PC寄存器) 2.1 功能演示 2.2 关于PC的面试题 3.虚拟机栈 3.1 初识虚拟机栈 3.2 栈帧的内部结构 3.2.1 局部变量表 3.2.2 操作数栈 3. ...

  4. JVM(一)JVM虚拟机内存结构 和 JAVA内存模型(JMM)

    本文转自:浅析java内存模型--JMM(Java Memory Model) - 路易小七 - 博客园,尊重作者,转载请注明出处~ JVM虚拟机内存结构 和 JAVA内存模型 是两个不同的概念 JV ...

  5. JVM之内存结构图文详解

    点击蓝色"程序猿DD"关注我 回复"资源"获取独家整理的学习资料! 对于开发人员来说,如果不了解Java的JVM,那真的是很难写得一手好代码,很难查得一手好bu ...

  6. JVM之内存结构详解

    对于开发人员来说,如果不了解Java的JVM,那真的是很难写得一手好代码,很难查得一手好bug.同时,JVM也是面试环节的中重灾区.今天开始,<JVM详解>系列开启,带大家深入了解JVM相 ...

  7. 一文解析JVM的内存结构,身为程序员还不弄懂JVM怎么行

    欢迎关注专栏:Java架构技术进阶.里面有大量batj面试题集锦,还有各种技术分享,如有好文章也欢迎投稿哦.微信公众号:慕容千语的架构笔记.欢迎关注一起进步. 前言 Jvm的内存结构是由<jav ...

  8. jvm虚拟机内存结构_JVM体系结构101:了解您的虚拟机

    jvm虚拟机内存结构 Java虚拟机(JVM)架构和Java字节码101的初学者速成班 Java应用程序无处不在,它们在我们的手机,平板电脑和计算机上. 在许多编程语言中,这意味着多次编译代码以使其在 ...

  9. JVM详解【三】JVM的内存结构

    JVM的内存区域   JVM的内存区域分为线程私有区域(程序计数器.虚拟机栈.本地方法区).线程共享区域(堆.方法区)和直接内存,如图所示   线程私有区域的生命周期与线程相同,随线程启动而创建,随线 ...

最新文章

  1. Linux Web服务器网站故障分析常用的命令
  2. call(),apply()和bind()的详解使用:
  3. android 怎么判断activity 从哪里启动的
  4. Sublime 2 配置
  5. 单例模式源码分析(jdk+spring+mybatis)
  6. iOS 开发--github的demo
  7. solidity字符串拼接
  8. linux中fork()函数具体解释(原创!!实例解说)
  9. 微信 8.0.1又来了!修复问题,终于能显示“在线状态”了
  10. 8.3 折特惠票仅剩 5 天!「2019 嵌入式智能国际大会」全日程大公开!
  11. SegmentFault 巨献 1024 程序猿游戏「红岸的呼唤」第四天任务攻略
  12. 不透水面提取操作实现
  13. C 语言中 scanf() 的用法
  14. 常见算法在实际项目种的应用
  15. 中科院计算机专业,中科院计算所博士平均年薪都超过50万了,计算机专业真是可以无脑选的那种...
  16. 2.63-将下面的C函数代码补充完整。函数srl用算术右移(由值xsra给出)来完成逻辑右移,后面的其他操作不包括右移或者除法。
  17. 微信输出日志在电脑桌面
  18. 砥砺前行!华为构建开放共赢云生态
  19. 压在心底慢慢体会__珍藏的句子
  20. 正点原子第四期环境搭建

热门文章

  1. 故障转移集群无法连接到节点_Redis集群以及自动故障转移测试
  2. 《集体智慧编程》第8章
  3. 4.Java中的关键字和标识符
  4. 8.Hadoop的学习(Hadoop的配置--搭建完全分布式)
  5. 万字长文带你了解蚁群算法及求解复杂约束问题【源码实现】
  6. OpenCASCADE:形状愈合之修复工具
  7. boost::shared_mutex相关的测试程序
  8. boost::hana::concat用法的测试程序
  9. GDCM:gdcm::Reader的测试程序
  10. boost::allocator_value_type的实例