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

    方法区

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

  • 相关阅读:
    解决 EDAS:Upload failed: The right margin is 0.535 in on page 1 问题
    解决 ImportError: No module named _internal
    静态页面如何实现 include 引入公用代码
    一个用 js 实现点阵图的编辑器演示
    从 art-template 模版维护到动态加载的思考
    Atom 备份神器 —— Sync Settings
    clicaptcha中文点击验证码开发经验总结
    通过 imagick 让 PHP 生成 PSD 文件缩略图
    让视频压制更简单
    Medoo个人修改版
  • 原文地址:https://www.cnblogs.com/amberbar/p/11641633.html
Copyright © 2011-2022 走看看