• 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

    方法区

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

  • 相关阅读:
    php通过某个日期段的周几,获取选中周几对应的日期
    thinkphp 使用paginate分页搜索带参数
    php小程序登录时解密getUserInfo获取openId和unionId等敏感信息
    微信小程序使用wxParse,解决图片显示路径问题
    php对二维数据排序
    微信小程序下拉框之二维数组或对象
    php获取指定月份月初和月末的时间戳
    WPF中实现自定义虚拟容器(实现VirtualizingPanel)
    SQL Server数据库ROW_NUMBER()函数使用详解
    WPF后台设置xaml控件的样式System.Windows.Style
  • 原文地址:https://www.cnblogs.com/amberbar/p/11641633.html
Copyright © 2020-2023  润新知