美文网首页
JVM运行时数据区和各个区域的作用

JVM运行时数据区和各个区域的作用

作者: 单v纯微笑 | 来源:发表于2018-12-29 17:21 被阅读0次

    一、JVM主要分为5个核心区域(6个子区域),分别是:

    1. 程序计数器
    2. Java虚拟机栈
    3. 本地方法栈
    4. Java堆
    5. 方法区
    6. *运行时常量池(属于“方法区”的一部分)

    二、各个区域作用和描述

    序号 区域名称 共享 作用 异常 备注
    1 程序计数器 线程私有 记录当前线程锁执行的字节码行号指示器。 Java虚拟机规范中唯一一个没有规定OutOfMemoryError(内存不足错误)的区域。 --
    2 Java虚拟机栈 线程私有 存放局部变量表、操作数据栈、动态链接、方法出口等信息。 栈深大于允许的最大深度,抛出StackOverflowError(栈溢出错误)。
    内存不足时,抛出OutOfMemoryError(内存不足错误)。
    常说的“栈”说的就是Java虚拟机栈,或者是Java虚拟机栈中的局部变量表。
    3 本地方法栈 线程私有 和Java虚拟机栈类似,不过是为JVM用到的Native方法服务。 同上 --
    4 Java堆 线程共享 存放实例化数据。 内存不足时,抛出OutOfMemoryError(内存不足错误)。 通过-Xmx和-Xms控制大小。
    GC的主要管理对象。
    5 方法区 线程共享 存放类信息(版本、字段、方法、接口等)、常量、静态变量、即时编译后的代码等数据。 内存不足时,抛出OutOfMemoryError(内存不足错误)。 --
    6 运行时常量池 线程共享 存放编译期生成的各种字面量和符号引用。 内存不足时,抛出OutOfMemoryError(内存不足错误)。 属于“方法区”的一部分。
    7 直接内存 -- 如NIO可以使用Native函数库直接分配堆外内存,该内存受计算机内存限制。 内存不足时,抛出OutOfMemoryError(内存不足错误)。 不是JVM运行时数据区的一部分,也不是JVM虚拟机规范中定义的内存区域。但这部分内存也被频繁的使用。所以放到一起。

    *参考《深入理解Java虚拟机 JVM高级特性与最佳实践》一书

    相关文章

      网友评论

          本文标题:JVM运行时数据区和各个区域的作用

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