• 【深入理解Java虚拟机】Java虚拟机运行时数据区


    Java虚拟机运行时数据区

    线程私有

    程序计数器

    • 1、当前线程所执行的字节码的行号指示器。
    • 2、唯一不会发生OutOfMemoryError的区域
    • 3、如果执行的是java方法,计数器值为虚拟机字节码指令地址;如果执行native方法,值为空。
    • 4、java多线程中一个时刻,一个处理器都只会执行一条线程中的指令,在线程轮流切换的过程中,每个线程都有自己的程序计数器,互不影响,以便线程切换恢复到正确的执行位置。

    Java虚拟机栈

    • 1、生命周期同线程相同

    • 2、描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法从调用直至完成的过程,就对应着一个栈帧在虚拟机中从入栈到出栈的过程。

    • 3、局部变量表存放编译期可知的基本数据类型(boolean、int、byte、short、double、long、float、char),对象引用(指向对象起始地址的指针或者是代表对象的句柄),returnAdress(指向字节码指令地址)

    • 4、两种异常

      • 1、StackOverflowError(线程请求的栈深度大于虚拟机允许的深度)
      • 2、OutOfMemoryError(虚拟机栈动态扩展时无法申请到足够的内存)

    本地方法栈

    • 和虚拟机栈相似,区别为虚拟机栈为虚拟机执行Java代码服务,本地方法栈为虚拟机使用Native方法服务。

    线程共享

    Java堆

    • 1、虚拟机管理最大的一块内存
    • 2、虚拟机启动时创建
    • 3、唯一目的:存放对象实例,几乎所有对象实例和数组都在这里分配
    • 4、垃圾收集器管理主要区域(GC堆)
    • 5、可以细分为新生代、老生代
    • 6、可以通过-Xmx 和 -Xms 控制
    • 7、堆中没有内存完成实例分配,且堆也无法再扩展时,就会OutOfMemoryError

    方法区

    • 1、目的:存放已被虚拟机加载的类信息、常量、静态变量等
    • 2、永久代
    • 3、HotSpot虚拟机才有的划分,方便垃圾收集器管理这部分内存
    • 4、这个区域还包含运行时常量池存放字面量,符号应用
    • 5、无法再申请内存时,就会OutOfMemoryError

    XMind - Trial Version

  • 相关阅读:
    《思帝乡·春日游》——[唐]韦庄
    《临江仙·梦后楼台高锁》——[宋]晏几道
    《西江月·夜行黄沙道中》——辛弃疾
    CentOS7 安装 MySQL 5.7.10
    CentOS6 下安装JDK7
    Makefile基础
    CentOS6 下Vim安装和配置
    CentOS6 下MySQL option file
    CentOS6 下编译安装 MySQL 5.6.26
    slice和substring的区别
  • 原文地址:https://www.cnblogs.com/monkjavaer/p/13604826.html
Copyright © 2020-2023  润新知