JVM运行时数据区(JAVA内存结构)

2018-04-27  本文已影响0人  luoyoub

JVM运行时数据区(JAVA内存结构)

以前一直对JVM内存结构不是很清楚,最近深入学习后为加深影响参考网上相关的资料整理了JVM的内存结构图

JVM被分为三个主要的子系统

  1. 类加载器子系统
  2. 运行时数据区
  3. 执行引擎
    这里写图片描述
    这里写图片描述
    控制参数

注意:java8去掉了-XX:PermSize和-XX:MaxPermSize,新增了-XX:MetaspaceSize和-XX:MaxMetaspaceSize

虚拟机会根据堆的空闲情况动态调整推大小,空余大于 70%,会减少到 -Xms,空余小于 40%,会增大到 -Xmx;服务器如果配置 -Xms = -Xmx,则可以避免堆自动扩展;

我们可以认为Major GC == Full GC,他们是一个概念,就是针对老年代/永久代进行GC。因为取名叫Full就会让人疑惑,到底会不会先Minor GC。事实上Full GC本身不会先进行Minor GC,我们可以配置,让Full GC之前先进行一次Minor GC,因为老年代很多对象都会引用到新生代的对象,先进行一次Minor GC可以提高老年代GC的速度。比如老年代使用CMS时,设置CMSScavengeBeforeRemark优化,让CMS remark之前先进行一次Minor GC;

参考资料

http://ifeve.com/under-the-hood-runtime-data-areas-javas-memory-model/

上一篇 下一篇

猜你喜欢

热点阅读