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

    方法区

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

  • 相关阅读:
    一 :了解MVC
    使用EasyUI查询与删除
    了解认识asp.net运行机制
    asp.net 页面静态化
    easyUI 布局
    禁止网页另存为 右键,左键等
    使用canvas 代码画小猪佩奇
    使浏览器不可后退 的代码(兼容性特别高),监听用户是否在此页面浏览
    底部版权时间自动变化,网页在线qq咨询
    vue首页加载慢问题解决
  • 原文地址:https://www.cnblogs.com/amberbar/p/11641633.html
Copyright © 2011-2022 走看看