zoukankan      html  css  js  c++  java
  • 【深入理解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

  • 相关阅读:
    Mybatis动态SQL
    Mybatis05__#和$的区别
    Mybatis04__输入参数/输出参数
    数据库中的字段和实体类中的字段不一致
    Mybatis中常用注解
    Mybatis03__配置文件简介
    Mybatis实现增、删、改操作时返回主键
    Mybatis04__CURD
    Mybatis02__Mybatis搭建
    lxrunoffline的使用
  • 原文地址:https://www.cnblogs.com/monkjavaer/p/13604826.html
Copyright © 2011-2022 走看看