美文网首页
jvm总结(1)——运行时数据区域和对象的内存布局

jvm总结(1)——运行时数据区域和对象的内存布局

作者: pluss | 来源:发表于2018-04-08 15:59 被阅读0次

java有5个运行时数据区域,分别是java堆、java虚拟机栈、本地方法栈、方法区、程序计数器。
其中,在HotSpot (一款java虚拟机)中,虚拟机栈和本地方法栈是合在一起的。

程序计数器,线程私有,记录字节码指令位置,相当于字节码的行号指示器,能给程序下一步的运行进行指向。如果执行的是本地方法,它的值会变成0,因为本地方法不是用java写的,有别的机制去管。他是唯一没有处理OOM情况的内存区域。

java堆,线程共享,存放对象实例和数组,占内存的大头。它的大小可固定可扩展,虚拟机指令
-Xms 指定堆内存最小值;
-Xmx 指定堆内存最大值;
-Xmn 指定年轻代大小。
是垃圾回收的主要区域。

java虚拟机栈,线程私有,每调用一个方法就会创建一个栈帧,存放局部变量表(基本数据类型,对象引用等)、操作数栈方法出口等信息,栈帧的出栈入栈代表着调用方法和结束调用。
-Xss 栈大小

本地方法栈,与虚拟机栈差不多,只不过服务的是本地方法。

方法区,线程共享,存放已被虚拟机加载的类元数据信息、常量、静态变量、即时编译后的代码等。回收目标主要是常量池和类的卸载
虚拟机指令,-XX:MaxPermSize 永久代大小
java8 移除了永久代,指令改为 -XX:MaxMetaspaceSize

  • 运行时常量池,方法区的一部分,存放编译后的字面量和符号引用。相关方法,string.intern()。

对象的内存布局,分为对象头、实例数据和对齐填充。

对象头又分为对象运行时数据类元数据指针两部分。如果对象是数组,还需要分出一部分内存存放数组长度。

  • 运行时数据(Mark Word)有哈希码、GC分代年龄、锁标志等。

实例数据记录了所有父类和子类自己的字段内容。

对齐填充实际是占位符,因为对象大小只能是8字节的整数倍,所以字节数不符合,就靠它来补齐。

相关文章

  • JMM与可见性

    JMM jvm运行时数据区域 Java 内存区域和内存模型是不一样的东西,内存区域是指 Jvm 运行时将数据分区域...

  • Synchronized原理

    1、认识JAVA对象的组成结构 对象的内存结构:在JVM中,对象在内存中的布局分为三块区域:对象头、实例数据和对齐...

  • JVM—【01】认识JVM的内存布局和运行时数据区

    1. Java 内存区域 1.1. JVM 内存布局 与 运行时数据区 1.2. Heap 堆 它的唯一目的就是存...

  • jvm总结(1)——运行时数据区域和对象的内存布局

    java有5个运行时数据区域,分别是java堆、java虚拟机栈、本地方法栈、方法区、程序计数器。其中,在HotS...

  • Java 虚拟机—内存模型

    一、JVM 内存模型 本节来分析 Java 对象如何进行分配和回收。 JVM 运行时数据区主要由线程私有区域和线程...

  • Java内存管理

    2.9 JVM内存管理 2.9.1 运行时数据区域 JVM所管理的内存可以分为一下几个运行时数据区域: 其中方法区...

  • jvm系列之内存区域

    jvm系列之内存区域 1 运行时数据区域    想要了解jvm,那对其内存分配管理的学习是必不可少的;java虚拟...

  • 聊聊jvm之自动内存管理机制

    本篇文章主要介绍一下jvm的内存管理机制,包括内存区域和垃圾收集相关内容。 1、jvm运行时数据区域包括方法区(M...

  • jvm运行时数据区域

    jvm运行时数据区域,看标题多少有些生硬和晦涩。换一种直白点儿的描述,jvm内存模型或jvm运行时内存划分。写这篇...

  • Java虚拟机--Java内存区域的划分和异常

    Java内存区域的划分和异常 运行时数据区域 JVM在运行Java程序时候会将内存划分为若干个不同的数据区域。 程...

网友评论

      本文标题:jvm总结(1)——运行时数据区域和对象的内存布局

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