美文网首页
JVM运行时数据区(JAVA内存结构)

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

作者: luoyoub | 来源:发表于2018-04-27 22:31 被阅读0次

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

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

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

  1. 类加载器子系统
  2. 运行时数据区
  3. 执行引擎
    这里写图片描述
    这里写图片描述
    控制参数
  • -Xms设置堆的最小空间大小;默认物理内存 1/64

  • -Xmx设置堆的最大空间大小;默认物理内存 1/4

  • -XX:NewSize设置新生代最小空间大小

  • -XX:MaxNewSize设置新生代最大空间大小

  • -XX:PermSize设置永久代最小空间大小

  • -XX:MaxPermSize设置永久代最大空间大小

  • -Xss设置每个线程的堆栈大小

  • XX:MetaspaceSize:class metadata的初始空间配额,以bytes为单位,达到该值就会触发垃圾收集进行类型卸载,同时GC会对该值进行调整

  • XX:MaxMetaspaceSize:可以为class metadata分配的最大空间。默认是没有限制的

  • MaxHeapFreeRatio: GC后如果发现空闲堆内存占到整个预估堆内存的N%(百分比),则收缩堆内存的预估最大值, 预估堆内存是堆大小动态调控的重要选项之一. 堆内存预估最大值一定小于或等于固定最大值(-Xmx指定的数值). 前者会根据使用情况动态调大或缩小, 以提高GC回收的效率

  • MinHeapFreeRatio: GC后如果发现空闲堆内存占到整个预估堆内存的N%(百分比), 则放大堆内存的预估最大值

  • SurvivorRatio: Eden/Survivor的值。8表示Survivor:Eden=1:8,因为survivor区有2个, 所以Eden的占比为8/10

注意: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/

相关文章

  • 线程安全之可见性问题

    Java内存模型 VS JVM运行时数据区 首先Java内存模型(JMM)和JVM运行时数据区并不是一个东西,许多...

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

    JVM运行时数据区(JAVA内存结构) 以前一直对JVM内存结构不是很清楚,最近深入学习后为加深影响参考网上相关的...

  • JVM 面试整理

    JVM 内存结构,运行时数据区各模块什么作用、存放什么数据 jvm 内存结构包含:heap堆区:负责存放所有的 对...

  • java内存模型

    java代码是运行在jvm上面的,java的运行时内存结构即是jvm运行时结构。 java内存结构从内存是否共享的...

  • Java从入门到入坑(底层篇)

    01:JVM 1:JVM内存结构 class 文件格式、运行时数据区:堆、栈、方法区、直接内存、运行时常量池、 堆...

  • java面试jvm总结

    JVM→ JVM 内存结构运行时数据区:堆、栈、方法区、直接内存、运行时常量池、堆存放对象, 方法区他用于存储已被...

  • 线程在JVM中的运行原理

    。线程在启动运行时,主要是在运行时数据区(JVM的内存模型),而JVM的运行时数据区主要包括堆,方法区,Java栈...

  • JVM

    jvm内存结构/java运行时数据区 JVM调优 调优流程: 压测,可以增加代码或者使用工具,比如LoadRunn...

  • jvm 运行时数据区-01

    jvm 运行时数据区 jvm 运行时数据区 ,将内存划分为5个区域,java 代码在运行时 类里面的 组成部分 分...

  • Java线程安全-可见性问题

    Java内存模型(JMM) 与 JVM运行时数据区 Java内存模型是《Java语言规范》中,描述对java语...

网友评论

      本文标题:JVM运行时数据区(JAVA内存结构)

      本文链接:https://www.haomeiwen.com/subject/udxwlftx.html