• 技术文章 >Java >Java入门

    JVM中的运行时数据区域是哪些

    VV2019-11-26 11:10:26转载816

    首先看图:

    19.png

    java相关视频教程:java课程

    1.程序计数器(PC)

    是线程独享的。是一块较小的内存,是当前线程所执行的字节码的行号指示器,是Java虚拟机规范中唯一没有被规定OOM(OutOfMemoryError)的区域。

    2.Java虚拟机栈

    是线程独享的。生命周期和线程相同。是Java方法执行的内存模型。执行每个方法都会创建一个栈帧,用于存储局部变量和操作数(对象引用)。局部变量所需要的内存空间大小在编译期间完成分配。所以栈帧的大小是不会改变的。

    存在两种异常情况:

    1)若线程请求深度大于栈的深度,会抛出StackOverFlowError。

    2)若栈在动态扩展的时候无法请求足够的内存,会抛出OOM。

    3.堆

    Java堆是所有线程共享的。是虚拟机启动的时候创建的。存放的是对象的实例和数组。所占内存最大。分为新生代(Young区)、老年代(Old区)。新生代又分为Eden区、Servior区。Servior区又分为From space区和To space区。Eden区和Servior区的内存比例为8:1。当扩展内存大于可用内存的时候,会抛出OOM。

    56c263aa5dd447199358838d4745abf.png

    4.本地方法栈

    本地方法栈是线程独享的。与Java虚拟机栈类似,但不是为Java方法(字节码)服务,而是为本地非Java方法服务。也会抛出StackOverFlowError和OOM。

    5.方法区

    方法区是所有线程共享的。用于存储已经被虚拟机加载的类信息、常量、静态变量等数据,又称为非堆(Non-Heap)。方法区又称为“永久代”,GC很少在这个区域进行,但不代表不会回收。这个区域回收目标主要是针对常量池的回收和对类型的卸载。当内存申请大于实际可用内存时,会抛出OOM。

    java相关文章推荐:java入门

    以上就是JVM中的运行时数据区域是哪些的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:CSDN,如有侵犯,请联系admin@php.cn删除
    专题推荐:JVM 运行时数据区域
    上一篇:一篇文章带你详细理解java中类的继承与多态 下一篇:java中关于scanner类的详细介绍
    线上培训班

    相关文章推荐

    • java中解压乱码解决方法• java中JShell脚本工具的使用• java中zip压缩乱码解决方法(附代码)• 一篇文章带你详细理解java中类的继承与多态

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网