• jvm内存结构


    内存模型粗略划分为:堆和栈

    详细划分为:堆,栈,本地方法栈,方法区,程序计数器

    存放对象实例

    每创建一个线程,都会为他分配内存空间作为他的栈,当方法执行时,会生成对应的栈帧(局部变量表、操作数栈、动态链接、方法出口),每一个方法被调用直至执行完成的过程,就对应着一个栈帧在栈中从入栈到出栈的过程。局部变量表存放了编译期可知的各种基本数据类型和对象引用

    ps:动态链接指的是在一个方法中调用另一个方法时,另一个方法的名称属于符号引用,将符号引用转为直接引用称为动态链接

    本地方法栈

    虚拟机调用本地方法(native关键字修饰的)时使用的内存区域

    方法区:(方法区是jvm规范的,而在HotSpot虚拟机中,方法区被实现为元空间,他使用的是物理机的本地内存)

    常量池,类的数据结构和静态变量,方法的信息等

    程序计数器

    为了线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,持有一个当前正在被执行的指令的引用。各条线程之间的程序计数器互不影响,属于“线程私有”。

     字符串常量池 String pool 实现为哈希表,存的是字符串对象的引用,真正的对象还是存放在堆中

    当在方法实例化一个对象时,关联的内存有哪些

    “Object obj”这部分的语义将会反映到虚拟机栈的局部变量表中

    new Object()”这部分的语义将会反映到Java堆中,形成一块存储了Object 类型所有实例数据值,另外,在Java 堆中还必须包含能查找到此对象类型数据(如对象类型、父类、实现的接口、方法等)的地址信息,这些类型数据则存储在方法区中

     

    new Object( )  对象实例的对象头包含了到Class对象的引用,类的元信息都是通过Class对象找到的

     

  • 相关阅读:
    linux笔记
    ui转化为py
    stl学习
    React第一课
    React 第一课
    创建一个类
    nodejs基本语法
    let和const
    qml_status笔记
    controller层的单元测试
  • 原文地址:https://www.cnblogs.com/moris5013/p/10700259.html
Copyright © 2020-2023  润新知