美文网首页
jvm内存模型学习笔记

jvm内存模型学习笔记

作者: 森林中大鸟 | 来源:发表于2020-05-18 06:12 被阅读0次

运行时区域

程序计数器

可以看作线程执行的字节码的行号指示器,记录执行的位置。字节码解释器通过改变计数器的值获取下一条要执行的指令。

Java虚拟机多线程是通过线程切换并分配处理器执行时间的方式实现的。因此,为了使线程切换后恢复到正确的执行位置,每个线程需要一各程序计数器,记录执行位置,单独存储,互不影响。

执行java方法:计数器记录的是正在执行的虚拟机字节码指令的位置

执行natvie方法:记录器为空(undefined)

属于线程私有内存,占用空间较小,不会出现OOM

java虚拟机栈

线程私有

生命周期与线程与线程相同

描述的是Java方法执行的内存模型,每个方法执行值会创建一个栈帧,用于存储 局部变量表,动态链接,方法出口,操作栈的等信息

每个方法被调用到执行完成的过程对应一个栈帧在虚拟机栈中入栈和出战的过程。

局部变量表存储编译期间可预知的基本数据类型(boolean,byte,short, int, char, float, long, double),对象引用(不等同于对象本身,可能是指向对象起始地址的引用指针,或者指向一个代表对象句柄或者其他与此对象相关的地址),和returnAddress类型(指向了一条字节码指令的位置)。

64位的long ,double类型的数据会占用两个局部变量的空间,其余数据类型只占用一个。

局部变量表所分配的内存空间在编译期间完成分配,进入一个方法时,这个方法需要在帧中分配多大的内存空间是完全确定的。方法运行期间, 不会改变局部变量表的大小。

线程请求的栈深度对于虚拟机所允许的深度时会出现栈溢出异常,如果虚拟机栈可以动态扩展,当扩展时无法申请到足够的内存时,会抛出OOM异常。

本地方法栈

和虚拟机栈类似,也会抛出栈溢出和OOM异常 。是为虚拟机执行natvie方法服务的,虚拟机栈为执行Java方法服务。

Java堆

虚拟机管理的内存中最大的一块

被所有线程共享

在虚拟机启动时创建

用于存放对象实例

垃圾回收器管理的主要区域

从分代垃圾回收算法的角度可分为老年代,新生代等

可处于物理上不连续的内存空间,可以时固定大小也可以是可扩展的(可扩展的通过-Xmx和-Xms空值)

如果没有内存可供实例分配,也不能扩展时会抛出OOM

方法区

运行是常量池

直接内存

相关文章

  • JVM内存模型(jvm 入门篇)

    概述 jvm 入门篇,想要学习jvm,必须先得了解JVM内存模型,JVM内存模型,JVM内存模型,JVM内存模型,...

  • 细说JVM内存模型

    前言 在正式学习 JVM 内存模型之前,先注意以下几个是问题: JVM 内存模型与 JAVA 内存模型不是同一个概...

  • JAVA内存模型笔记(JMM)

    JAVA内存模型 这里做的笔记是结合JVM中的java内存模型 和java并发编程艺术中讲的java内存模型 再结...

  • JVM学习笔记(3)-垃圾收集算法

    JVM学习笔记(1)-内存管理机制 JVM学习笔记(2)-内存分配与回收 垃圾收集算法 JVM垃圾收集算法有四种:...

  • Flink源码阅读(六)--- Flink 内存模型

    本篇文章主要介绍下FLink的内存模型,在介绍Flink内存模型之前,我们首先学习下JVM内存结构 1. JVM内...

  • jvm内存模型学习笔记

    运行时区域 程序计数器 可以看作线程执行的字节码的行号指示器,记录执行的位置。字节码解释器通过改变计数器的值获取下...

  • jvm

    笔者最近学习jvm 的内存模型,这里根据下面几个模块来做个总结: 1.jvm的内存模型 2.jvm gc原理 jv...

  • JVM

    栈容量由-Xss指定深入理解JVM—JVM内存模型 JVM内存模型和JVM参数的关系

  • [Java多线程编程之八] Java内存模型

    一、Java内存模型 == JVM内存模型?   很多人都会认为Java内存模型就是JVM内存模型,但实际上是错的...

  • JVM之内存模型以及各种溢出异常

    近期学习了JVM,借此整理一下JVM有关的内存模型和各种内存溢出。 运行时数据区域 要理解Java的内存模型,作者...

网友评论

      本文标题:jvm内存模型学习笔记

      本文链接:https://www.haomeiwen.com/subject/rsjyohtx.html