JVM - 复习
内存模型图

程序计数器(PC)
程序计数器的特点
PC是一小块内存空间,用于记录当前线程执行的字节码指令的地址。如果执行的是本地方法(native),PC里此时显示Undefined
优点:
- 控制程序执行流程
- 每个线程都有PC,因此可以记录每个线程当前执行的位置
特点:
- 随着线程的创建而创建,随着线程的结束而销毁
- 线程私有
- PC只是记录字节码指令的地址,因此是内存中唯一不会出现
OutOfMemoryError(内存溢出) - PC是一小块内存空间
冷知识:PC是内存中唯一不会出现OutOfMemoryError(内存溢出)
java虚拟机栈(java 栈)
Java栈是描述java方法运行过程的内存模型,java虚拟机栈会为每一个即将运行的java方法创建栈帧用于存储该方法的信息。(如:局部变量表)
特点:
- Java栈通常会遇到两个异常,
StackOverFlowError和OutOfMemoryErrorStackOverFlowErrorjava虚拟机不允许Java栈动态扩展,当线程请求栈的深度超过了Java栈的最大深度时,就会抛StackOverFlowErrorOutOfMemoryError允许动态扩展,但可使用内存用完无法动态扩展时,抛OutOfMemoryError
- Java栈也是随线程创建而创建,随线程销毁而销毁(线程私有)
冷知识: StackOverFlowError可能还有很多内存
本地方法栈(C栈)
本地方法栈是描述本地方法运行过程的内存模型,因为本地方法(native)通常使用c语言,因此本地方法栈也叫C栈。
本地方法栈结构和Java差不多,也会创建栈帧。但当JVM不支持native方法本地方法栈可以不被创建,否则随线程创建和销毁。
堆
堆是用于存放对象的内存空间
特点:
- 堆空间可以是不联系的内存空间
- 堆是垃圾回收的主要场所,可以分为新生代(Eden)、老年代
- JVM中只有一个,所有线程共享一个堆空间里的对象,因此需要注意多线程下的并发问题
- 堆在JVM创建的时候被创建
堆可以动态扩展,但无多余内存扩展时会抛OutOfMemoryError。
方法区
所有的字段和字节码还有一些特殊方法(构造方法、接口)都在此定义。简单说,说有定义方法和信息都存储在此区域,此区域属于共享区间(静态变量,常量,类信息(构造方法,接口的定义),运行时常量池)

JVM - 复习的更多相关文章
- JVM复习笔记
1. JVM是什么? JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来 ...
- JVM复习总结
运行时数据区域 图中深色区域为,由所有线程共享的数据区域,其他为线程隔离的数据区. 程序计数器 程序计数器可以看作是当前线程执行的字节码的行号指示器. 虚拟机栈 虚拟机栈描述的是Java方法执行的内存 ...
- JVM复习--新生代GC
在复习Java内存机制的过程中有一些新问题,自问自答,做个记录.新生代是java堆内存的一部分.堆内存分新生代和老生代两大块,也有把堆内存分为新生代老生代永久代(持久代)三块的说法.(不过这种说法应该 ...
- 新鲜出炉!花了三天整理的JVM复习知识点,面试突击必备!
此次JVM知识点包含以下几个部分 1.类加载机制 2.jvm运行时数据区 3.java对象内存布局 4.jvm内存模型 5.垃圾回收机制 6.垃圾收集器 7.问题排查 一 类加载机制 主要说的部分是这 ...
- 高强度学习训练第四天总结:JVM+Redis
JVM 复习了JVM堆内存的几个模块. 复习了JVM的几个控制工具. 复习了JVM发展历史 Redis 复习了Redis的事务控制.
- 复习Java虚拟机:JVM中的Stack和Heap
在JVM中,内存分为两个部分,Stack(栈)和Heap(堆).这里,我们从JVM的内存管理原理的角度来认识Stack和Heap,并通过这些原理认清Java中静态方法和静态属性的问题. 一般,JVM的 ...
- JVM原理速记复习Java虚拟机总结思维导图面试必备
良心制作,右键另存为保存 喜欢可以点个赞哦 Java虚拟机 一.运行时数据区域 线程私有 程序计数器 记录正在执行的虚拟机字节码指令的地址(如果正在执行的是Native方法则为空),是唯一一个没有规定 ...
- [Java复习] JVM
Part1:Java类加载机制:类加载器,类加载机制,双亲委派模型 1. Java 类加载过程? 类加载过程即是指JVM虚拟机把.class文件中类信息加载进内存,并进行解析生成对应的class对象的 ...
- JVM虚拟机知识问答总结(简单复习,快速回忆!)
写在最前面 这个项目是从20年末就立好的 flag,经过几年的学习,回过头再去看很多知识点又有新的理解.所以趁着找实习的准备,结合以前的学习储备,创建一个主要针对应届生和初学者的 Java 开源知识项 ...
随机推荐
- Java连载35-类总结、空指针异常
一.总结 1.栈内存中主要存储的是方法体中的局部变量 2.对象内部有实例变量,实例变量存储在堆内存中 3.变量分类:局部变量(方法体中声明):成员变量(方法体外声明) 实例变量(前边修饰符没有stat ...
- 要不要学习Git(分布式版本控制系统)
做技术的人,要不要学一学Git呢? 提出这个问题,是因为很多小伙伴还不会使用Git. 对于任何新一代的技术工具,它在业界普及都有一个过程,Git的阻碍是:学习成本.工具迭代的成本. SVN诞生于200 ...
- CDH高可用hadoop集群性能配置
1.HDFS的高可用配置 dfs.namenode.edits.dir (NameNode 编辑目录) : 写入 NameNode 编辑的本地文件系统上的目录.未指定将存放在namenode数据目录中 ...
- 阿里云服务器CentOS6.9安装Mysql
上篇讲了CentOS6.9安装tomcat,这篇来讲mysql的安装 1.查看CentOS是否安装了MySQL yum list installed | grep mysql //查看CentOS是否 ...
- 深入MYSQL随笔
(1)查询生命周期:从客户端到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回给客户端.执行是整个生命周期中,最重要的阶段. (2)慢查询基础:优化数据访问,减少访问的数据行. (3)查询不 ...
- 3. Git与TortoiseGit基本操作
1. GitHub操作 本节先简单介绍 git 的使用与操作, 然后再介绍 TortoiseGit 的使用与操作. 先看看SVN的操作吧, 最常见的是 检出(Check out ...), 更新 (U ...
- Java-Thread01之创建线程
------  ...
- Asp.NetCore源码学习[2-1]:日志
Asp.NetCore源码学习[2-1]:日志 在一个系统中,日志是不可或缺的部分.对于.net而言有许多成熟的日志框架,包括Log4Net.NLog.Serilog 等等.你可以在系统中直接使用这些 ...
- 从零开始的 phpstorm+wamp 组合下的debug环境搭建(纯小白向)
本文主要是为了帮自己记住每次重装系统后需要干点啥,如果能帮到你,烦请给个好评 环境说明: 1. windows10 64bit 2. wampservers 3.0.6(x86) apache2.4. ...
- 声学回声消除(Acoustic Echo Cancellation)
回声就是声音信号经过一系列反射之后,又听到了自己讲话的声音,这就是回声.一些回声是必要的,比如剧院里的音乐回声以及延迟时间较短的房间回声:而大多数回声会造成负面影响,比如在有线或者无线通信时重复听到自 ...