zoukankan      html  css  js  c++  java
  • JVM

    内存模型图

    程序计数器(PC)

    程序计数器的特点

    PC是一小块内存空间,用于记录当前线程执行的字节码指令的地址。如果执行的是本地方法(native),PC里此时显示Undefined

    优点:

    • 控制程序执行流程
    • 每个线程都有PC,因此可以记录每个线程当前执行的位置

    特点:

    • 随着线程的创建而创建,随着线程的结束而销毁
    • 线程私有
    • PC只是记录字节码指令的地址,因此是内存中唯一不会出现OutOfMemoryError(内存溢出)
    • PC是一小块内存空间

    冷知识:PC是内存中唯一不会出现OutOfMemoryError(内存溢出)

    java虚拟机栈(java 栈)

    Java栈是描述java方法运行过程的内存模型,java虚拟机栈会为每一个即将运行的java方法创建栈帧用于存储该方法的信息。(如:局部变量表)
    特点:

    • Java栈通常会遇到两个异常,StackOverFlowErrorOutOfMemoryError
      • StackOverFlowErrorjava虚拟机不允许Java栈动态扩展,当线程请求栈的深度超过了Java栈的最大深度时,就会抛StackOverFlowError
      • OutOfMemoryError 允许动态扩展,但可使用内存用完无法动态扩展时,抛OutOfMemoryError
    • Java栈也是随线程创建而创建,随线程销毁而销毁(线程私有)

    冷知识: StackOverFlowError可能还有很多内存

    本地方法栈(C栈)

    本地方法栈是描述本地方法运行过程的内存模型,因为本地方法(native)通常使用c语言,因此本地方法栈也叫C栈。
    本地方法栈结构和Java差不多,也会创建栈帧。但当JVM不支持native方法本地方法栈可以不被创建,否则随线程创建和销毁。

    堆是用于存放对象的内存空间

    特点:

    • 堆空间可以是不联系的内存空间
    • 堆是垃圾回收的主要场所,可以分为新生代(Eden)、老年代
    • JVM中只有一个,所有线程共享一个堆空间里的对象,因此需要注意多线程下的并发问题
    • 堆在JVM创建的时候被创建

    堆可以动态扩展,但无多余内存扩展时会抛OutOfMemoryError

    方法区

    所有的字段和字节码还有一些特殊方法(构造方法、接口)都在此定义。简单说,说有定义方法和信息都存储在此区域,此区域属于共享区间(静态变量,常量,类信息(构造方法,接口的定义),运行时常量池)

  • 相关阅读:
    linux添加超级用户
    MongDB配置方法
    【bzoj5174】[Jsoi2013]哈利波特与死亡圣器 二分+树形dp
    【bzoj3560】DZY Loves Math V 欧拉函数
    【bzoj5157】[Tjoi2014]上升子序列 树状数组
    【uoj#317】[NOI2017]游戏 2-SAT
    【bzoj5146】有趣的概率 微积分
    【bzoj4695】最假女选手 线段树区间最值操作
    【bzoj4355】Play with sequence 线段树区间最值操作
    【loj2319】[NOIP2017]列队 Splay(卡过)
  • 原文地址:https://www.cnblogs.com/amberbar/p/11641633.html
Copyright © 2011-2022 走看看