JVM内存结构

JVM在运行java程序时,将它们划分成几种不同的数据,分别存储在不同的区域。但是这些数据统称为(Runtime Data)。

JVM规范中运行时数据分为6种

    1.PC寄存器数据(程序计数器)

        PC寄存器是一种数据结构,用于保存当前正常运行的程序内存地址,用于保存被中断的线程的现场。

    2.Java栈

        JAVA栈总是和线程关联在一起,每创建一个线程的时候,JVM都会为这个线程创建一个对应的JAVA栈,在这个栈中的每个栈帧则又是对应一个个方法,每个栈帧则会包含内部变量(方法的局部变量),操作栈和方法返回值等信息。

        每执行完一个方法,这个栈帧就会弹出栈帧的元素作为这个方法的返回值,并且清除这个栈帧,栈顶的栈帧就是当前的活动栈。(PC寄存器指向的地址--->java栈的栈顶)栈帧的返回值则会被添加到操作栈中成为一个操作数,即得到如果是一个没有返回值的栈帧的则不会对操作栈的操作数有影响。

    3. 堆

        堆是存储java对象的地方。每一个储存在堆中的Java对象都会是这个对象的类的一个副本,它会继承自它父类的所有非静态属性。

    4.方法区(所谓的永久区)

        被虚拟机加载的类信息、常量、静态常量等。 在JDK8中永久区被移除,取而代之的是元数据区-MetaSpace。

    5.本地方法栈

        本地方法栈是JVM运行Native方法准备的空间,它和前面介绍的Java栈的作用是类似的。

        Native方法的底层是C++编写的。

    6.运行时常量池

            是方法区的一部分。存储着每个class文件中的常量表,属于方法区的一部分。

 补充:方法区,本地方法栈,运行时常量池 都在堆中进行分配

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在Java虚拟机规范中将Java运行时数据划分为6种,分别为: PC寄存器(程序计数器) Java栈 堆 方法区 ...
    马小跑_7933阅读 286评论 0 0
  • 前言 在研读了许多关于JVM的相关博客以及论坛讨论内容后,这里针对JVM内存做一个初步的整理与总结,这里将内容分为...
    still_loving阅读 721评论 0 1
  • JVM(Java Virtual Machine Java 虚拟机)是一种用于计算设备的规范,基于这套规范,许多团...
    大佛爱读书阅读 498评论 0 0
  • 索引:堆、栈、方法区、直接内存、堆和栈区别 所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢...
    逢栲怭過阅读 402评论 0 0
  • 西电北门外,遇见了“爆米花大叔”。嘭的一声,闻到了和儿时记忆中一样焦香的米花味道,便挪不开双脚。贪婪的我想把这份记...
    朱小洁童鞋阅读 352评论 0 2