jvm

jvm内存模型: 堆、栈、程序计数器、本地方法栈、元空间

  1. 堆 : 新生代、老年代(jvm调优主要内存)

  2. 程序计数器: 程序计数器是一块较小的内存空间,可看作当前线程正在执行的字节码的行号指示器
    1.1 如果当前线程正在执行的是

    • Java方法
      计数器记录的就是当前线程正在执行的字节码指令的地址
    • 本地方法
      那么程序计数器值为undefined
      1.2 作用
      程序计数器有两个作用
      • 字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制,如:顺序执行、选择、 循环、异常处理

      • 在多线程的情况下,程序计数器用于记录当前线程执行的位置,从而当线程被切换回来的时候能够知道该线程上次运行到哪儿了。

文献:
https://blog.csdn.net/truelove12358/article/details/100531911

jvm调优:
jvm调优实际就是对堆空间不同区的大小、比例调节,
jvm调优过程一般都是对full gc 的调节从而减少Full GC 的发生
Young GC(新生代回收)、Full GC(整个堆回收),所以发生Full GC会比Young GC耗时,因此需要尽量减少发生Full GC的次数
Minor GC发生在Eden区;Young GC发生在Eden、S0、S1区)

一. 堆划分区域: 新生代(Eden+2个survivor) + 老年代


image.png

一般新生代各区的调节比例为8:1:1 (伊甸园Eden:幸存区S0:幸存区S1)即Eden为8/10,具体原因看文献
目前生产新生代各区比例配置: -XX:SurvivorRatio=8
-Xms(初始堆大小)=5G -Xmx(最大堆大小)=5G -Xmn(新生代大小)=2G -XX:SurvivorRatio=8
为了防止垃圾收集器在最小、最大之间收缩堆而产生额外的时间,通常把最大、最小设置为相同的值;

image.png

二. 发生Full GC的原因:

  1. 老年代被写满了(主因)
    调优时尽量让对象在新生代GC时被回收、让对象在新生代多存活一段时间和不要创建大对象,避免直接在旧生代创建对象 。所谓的大对象指的是那种对象大小较大、很长的字符串以及数组
  2. System.gc()被显示调用
    垃圾回收不要手动触发,尽量依靠JVM自身的机制
  3. 持久代Pemanet Generation空间不足(java8后淘汰)
    增大Perm Gen空间,避免太多静态对象 , 控制好新生代和旧生代的比例

三. 对象在堆各区过程:
虚拟机采用了分代思想去管理对象,为了区分对象对应分配的区域,虚拟机为每个对象设置了一个Age计数器;
对象一开始会被分配在新生代Eden区,当Eden区没有足够的空间进行分配时,虚拟机将发起一次Minor GC;如果对象在一个MinorGC(只回收Eden区)过后再仍然存活,就将被移到survivor区中,然后age+1。对象每经历一次Minor GC age就会增加1岁,当达到某个阈值的时候(默认为15岁),就会晋升到老年代。可以通过设置参数-XX:MaxTenuringThreshold来设置晋升的年龄。

然而对于虚拟机来说,并不是一定要达到这个要求才能晋升为老年代。还有一种情况就是某个年龄的对象大小的总和大于survivor区的一半时,年龄大于或等于这个年龄的对象都将进入到老年区。

四. GC垃圾回收:
GC Roots 可达性分析算法, 分析是否存活,被引用
回收算法:标记复制算法,标记清除算法,标记整理,分代收集

Minor GC 和 Full GC 的区别,触发条件,以及空间分配担保策略?
Minor GC: - 年轻代空间回收内存被称为 Minor GC,标记复制算法,发生一次GC,在eden区域的对象会到,会到from区域中再到to区域,每次gc还在的话对象的年龄就会加1,经过n次gc还在,默认是15岁,就会去老年代了
edne区域不足时,触发gc
空间分配担保策略就是开启条件判断,在发生Minor GC 之前,虚拟机会先检查老年代最大可用连续空间是否大于新生代所有对象大小总和
如果大于,直接GC,
如果小于,判断是不是有设置一个参数,担当值,没有的话直接full gc

Full GC: - Full GC 是清理整个堆空间的 —— 包括年轻代、老年代和元空间
    使用标记清除算法,所以会产生很多的碎片空间,并且时间长。老年代空间不足触发

五. 分析dump文件结果,判断是否需要优化

如果各项参数设置合理,系统没有超时日志出现,GC频率不高,GC耗时不高,那么没有必要进行GC优化,如果GC时间超过1-3秒,或者频繁GC,则必须优化。

注:如果满足下面的指标,则一般不需要进行GC:
Minor GC执行时间不到50ms;
Minor GC执行不频繁,约10秒一次;
Full GC执行时间不到1s;
Full GC执行频率不算频繁,不低于10分钟1次;


image.png

六. jvm 配置:


image.png

文献:
https://zhuanlan.zhihu.com/p/58897189 (有JVM调优参数参考部分)
https://blog.csdn.net/peerless_fu/article/details/83550246(新生代各区比值设为8的原因)
https://blog.csdn.net/u010723709/article/details/47356507

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,254评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,875评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,682评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,896评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,015评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,152评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,208评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,962评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,388评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,700评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,867评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,551评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,186评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,901评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,142评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,689评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,757评论 2 351

推荐阅读更多精彩内容

  • JVM 调优概述 性能定义 吞吐量 - 指不考虑 GC 引起的停顿时间或内存消耗,垃圾收集器能支撑应用达到的最高性...
    裘马轻狂大帅阅读 246评论 0 1
  • 声明:原创文章,转载请注明出处。http://www.jianshu.com/u/e02df63eaa87 1、J...
    唐影若凡阅读 1,090评论 0 3
  • JVM参数的含义 并行收集器相关参数 CMS相关参数 辅助信息 GC性能方面的考虑对于GC的性能主要有2个方面的指...
    jimjayce阅读 1,108评论 1 1
  • JVM 调优概述 性能定义 吞吐量 - 指不考虑 GC 引起的停顿时间或内存消耗,垃圾收集器能支撑应用达到的最高性...
    裘马轻狂大帅阅读 256评论 0 1
  • 一、server和client 用法:java -server ..... -client设置jvm使用clien...
    梅西爱骑车阅读 6,031评论 0 5