jvm 优化篇-(6)-问题大汇总,每日一题?

死神---朽木白哉
1、JVM何时会回收♻️类?-----0415

三个条件缺一不可:

  • 1、类的所有实例(堆中)都已经被回收♻️。
  • 2、该类的ClassLoader已经被回收♻️了。
  • 3、该类对应的Class对象没有任何引用。
2、方法执行完毕,栈帧立马出栈,该栈帧中的变量数据立马回收♻️?还是等垃圾回收器回收♻️?为什么?-----0416

出栈就回收了,基础类型变量内存分配就在栈中,所以出栈就直接销毁了。引用堆中的对象需要等一次YongGC。

3、实例对象被回收’和‘Class对象没有引用’ 是一个概念么?-----0417

不是,Class对象代表的是类,如果有变量引用了类的Class对象,那么就是有引用。

4、新生代为何分为三块区域{Eden、From、To},半劈分成两块为什么不行?-----0418

三块区域,只有From or To 空间是闲置的,而分为两块后,要有一半的新生代资源闲置着。

5、如何理解STW对系统的影响?调优策略如何制定?------0419

一直以来都是想着控制yonggc在50ms以下,oldgc在300ms以下。但是GC执行势必都会带来STW,JVM分代回收♻️的本质是对象的生命周期结束时就近一次执行GC进行回收。所以调优者需要估算出对象的生命周期。

6、parnew+cms回收器,如何保证只做yonggc?-------0420

需要观察每秒钟新增多少对象,多长时间触发一次yonggc,平均一次yonggc后有多少对象存活,survivor区域是否放的下(对象动态年龄等问题),计算survivor区域与eden区域比例跳过动态年龄导致进入老年代的问题。

7、使用ParNew回收器并行线程是怎么设置的?------0421

一般是与应用服务器的CPU核数保持一致。非要设定可以使用-XX:ParallelGCThreads指定。

8、启动系统的时候是选择服务端模式还是客户端模式?对ParNew有什么影响?------0422

系统部署在linux上就选择server模式,部署在windows上就选择client模式。
一般web项目都是部署在多核的linux服务器上面,ParNew可以充分利用多核资源。windows上一般都是安装client模式,比如qq、wx等,如果用ParNew方式会导致CPU运行多个线程,反而加重了性能开销。所以Client一般选择Serial模式。

9、CMS回收♻️第一阶段“初始标记”都标记哪些?STW嘛?------0423

初始标记需要STW,为了保障低停顿,只标记出GC-ROOT直接引用的对象。
10、CMS回收♻️第二阶段“并发标记”都标记哪些?STW嘛?------0424
并发标记不会STW,垃圾回收线程与工作线程同时工作。并发标记时根据第一阶段标记的GC-ROOT进行延展标记。

11、CMS回收♻️第三阶段“重新标记”都标记哪些?STW嘛?------0425

重新标记需要STW,需要标记第二阶段新创建对象&已有对象可能失去引用变成垃圾。

12、CMS回收♻️第四阶段“并发清理”会STW嘛?------0425

并发清理很耗时,需要进行对象清理,垃圾回收线程与工作线程并发运行的,不会STW。

13、CMS回收♻️“并发标记”&“并发清理”这两个阶段时,垃圾回收线程与工作线程并行运行,会导致cpu资源会成为瓶颈,CMS并发回收线程数如何设置?-------0426

cms默认启动的垃圾回收线程数:(cpu核数+3)/4

14、CMS回收器在“并发清理”阶段可能会发生“Concurrent Mode Failure”问题?为什么?发生了“Concurrent Mode Failure”问题jvm会如何解决?-------0427

CMS在“并发清理”阶段系统线程是工作着的,这就会产生“浮动垃圾”(通过YongGC进入老年代的对象),CMS为了保证回收期间还有一定的内存空间让一些对象进入老年代,一半会预留一些空间,-XX:CMSInitiatingOccupancyFraction设置剩余百分比(默认68%)。
如果CMS在回收期间,剩余空间小于本次晋升的对象大小会怎样呢?
就会发生“Concurrent Mode Failure”错误,也就是说并发垃圾回收失败,此时JVM会升级处理策略:自动启用“Serial Old”垃圾回收♻️替代CMS回收♻️,Serial Old 会强行STW,重新进行GC-Roots跟踪标记出全部垃圾对象,不允许新对象产生,一次性清理垃圾对象,然后恢复系统线程。

15、CMS内存碎片整理会STW嘛?为什么?-------0428

首先内存整理会STW,内存碎片会导致分配连续空间受阻,JVM就会频繁触发FullGC。所以CMS也会根据设置-XX:CMSFullGCsBeforeCompaction=n意思是说在上一次CMS并发GC执行过后,到底还要再执行多少次full GC才会做压缩。默认是0,也就是在默认配置下每次CMS GC顶不住了而要转入full GC的时候都会做压缩。 如果把CMSFullGCsBeforeCompaction配置为10,就会让上面说的第一个条件变成每隔10次真正的full GC才做一次压缩。

16、有几种情况会触发老年代执行GC?-------0429

-1、老年代可用空间小于新生代全部对象的大小,如果没有开启空间担保策略会执行FullGC,一般默认担保策略是打开的。
-2、历次新生代GC后进入老年代的平均大小大于老年代可用空间。
-3、老年代使用空间大于-XX:CMSInitiatingOccupancyFraction设置的阀值。

17、什么是分配担保?默认开启嘛?可以去掉分配担保机制吗?为什么需要的是连续空间?-------0430
  • 1、在发生Minor GC之前,虚拟机会检查老年代最大可用的连续空间是否大于新生代所有对象的总空间
    • 如果大于,则此次Minor GC是安全的。
    • 如果小于,则虚拟机会查看HandlePromotionFailure设置分配担保。
      • HandlePromotionFailure=true,老年代最大可用连续空间是否大于历次晋升到老年代的对象的平均大小,如果大于,则尝试进行一次Minor GC。
      • HandlePromotionFailure=false or 老年代最大可用连续空间小于历次晋升到老年代的对象的平均大小,执行FullGC。
  • 2、1.6以后是默认开启的。
  • 3、可以去掉,会加大FullGC发生的概率。虚拟机短暂停止,吞吐量、性能下降。
  • 4、新生代使用的是复制算法,复制算法决定需要连续空间。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容

  • 工作之余,想总结一下JVM相关知识。 Java运行时数据区: Java虚拟机在执行Java程序的过程中会将其管理的...
    Huang远阅读 634评论 0 2
  • 第二部分 自动内存管理机制 第二章 java内存异常与内存溢出异常 运行数据区域 程序计数器:当前线程所执行的字节...
    小明oh阅读 1,159评论 0 2
  • JVM面试题 来都来了,点个赞呗 文末领取博主为大家准备的面试渡劫大礼包喔 1、内存模型以及分区,需要详细到每个区...
    Python学习君阅读 728评论 0 7
  • 十二月的天气略微有些冷,南方的天气总挥洒着细密的雨滴,如若真是南方,也是好的,不偏不倚的江南,给人一种怎样的遐思,...
    长路M阅读 371评论 1 2
  • 24 今天中午不知道怎么了,睡醒了之后整头是汗,贼难受了,就连今天下午跑步也没这么湿。 今天体检了,比之前重了...
    YTiua阅读 139评论 0 0