美文网首页
Java运行时内存区域的划分

Java运行时内存区域的划分

作者: 紫薯自述 | 来源:发表于2018-03-28 14:04 被阅读0次

Jvm 在运行的过程中内存的划分区域

    堆(Heap) 、栈(Stack) 、程序计数器(Program Counter Register)、方法区(Method Area)

1.堆

     存放目标对象和数组区域

     垃圾回收算法主要工作区域

     大部分Java虚拟机都会将此区域设置成动态不可扩展的

     Java堆可以不是物理上连续的内存空间,只要逻辑上连续即可

     堆空间不足会抛出 OutOfMemoryError

2.栈

   2.1 虚拟机栈

       描述本地方法在运行过程中需要存储的信息

       存储变量表 操作栈 动态链接 方法出口

       方法调用一次的过程,就是帧栈一次出栈和入栈的过程

       编译器存放的数据类型:八种基本数据类型,对象引用,returnAddress类型

       StackOverFlowError : 如果线程请求的资源深度大于虚拟机所允许的深度,此区域会抛出异常

       OutOfMemoryError:  在虚拟机会动态扩展的情况下,如果申请不到足够的内存,就会抛出OutOfMemoryError(大部分Java虚拟机都会支持动态扩展)

   2.2 本地方法栈

        本地方法栈只为虚拟机栈使用的Native 方法服务

        HotSpot虚拟机直接将此区域和虚拟机栈合并

        同虚拟机栈一样,此区域也会抛出StackOverFlow和OutOfMemoryError 异常

3.方法区

        各个线程共享的一块区域

        存放虚拟机加载的类信息,常量,静态变量,即时编译器编译后的的代码

        别名:永久代

        对这已区域的回收主要针对:常量池回收和对类型的卸载

        此区域也会抛出OutOfMemoryError

        运行时常量

4.程序计数器

        标记某个线程执行字节码指令行号,记录指令执行到哪了

        每个线程都有一个独立的程序计数器

参考资料:《深入Java虚拟机》

相关文章

网友评论

      本文标题:Java运行时内存区域的划分

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