1.深入理解java虚拟机--java内存区域

运行时数据区域

    java虚拟机所管理的内存将会分为以下几个区域,如图:

《1.深入理解java虚拟机--java内存区域》

程序计数器

    1.可以看成当前线程所执行的字节码的行号指示器。

    2.每条线程都需要一个独立的程序计数器,各条线程之间计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存

java虚拟机栈

    1.线程私有的

    2.生命周期同线程一样

    3.java虚拟机栈描述的是Java方法执行的内存模型(为java方法服务)

    4.java程序员主要关注的 则是 栈中的局部变量表部分

    

    局部变量表–存放编译期可知的各种数据类型, 对象引用 和 return Address(指向一条字节码指令的地址)

    局部变量表 所需的内存空间在编译期间完成分配,在方法运行期间不会改变大小

本地方法栈

   1. 与java虚拟机栈发挥的作用非常相似

    2. 区别: 本地方法栈为虚拟机使用到的Native方法服务

java堆

    1. 唯一的目的是存放对象

    2.是所有线程共享的一块区域

    3.在虚拟机启动时创建

方法区

    1.线程共享的区域

    2.用于存储已被虚拟机加载的 类信息,常量,静态变量,即时编译编译后的代码等数据

    3.当方法区无法满足内存分配需求时,会抛出 OutOfMemoryerror 异常

运行时常量池

    1.运行时常量池是方法区的一部分

    2.用于存放编译期生成的各种字面量和符号引用

    3.运行时常量池 相对于 class 常量池的 另一个特点是  具备动态性,运行期间也可能将新的常量放入池中

    4.当常量池无法再申请到内存时,会抛出OutOfMemeryError 异常

直接内存

    1.本机直接内存的分配不受java堆大小的限制 , 收到本机总内存大小以及处理器寻址空间的限制

    2.当各个内存区域总和大于物理内存限制,会导致动态扩展中出现 OutOfMemoryError 异常

    

    

    原文作者:java虚拟机
    原文地址: https://blog.csdn.net/qq_41646707/article/details/79625465
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞