本文介绍内容如下:
一、运行时数据区域
二、各运行时数据区域特点
一、运行时数据区域
(1)线程共享:堆、方法区
(2)线程隔离:程序计数器、虚拟机栈、本地方法栈
二、各运行时数据区域特点
1、程序计数器
(1)特点:
1⃣️程序计数器是一块较小的内存,可当作线程执行字节码的行号指示器;
2⃣️虚拟机概念模型,字节码解释器的工作通过改变计数器的值来选取下一条需要执行的字节码指令,分之、循环、跳转、异常处理、线程恢复等基础功能;
3⃣️线程切换后能恢复到正确的执行位置,每条线程都需要一个独立的程序计数器,各线程间计数器互不影响,独立存储
4⃣️此区域是唯一一个在Java虚拟机规范中没有规定任何OOM的区域
2、虚拟机栈
(1)特点
1⃣️虚拟机栈线程私有,它的生命周期与线程相同
2⃣️描述方法的执行的内存模型:每个方法在执行的同时都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接、方法出口信息。方法执行完成,对应一个栈帧在虚拟机中入栈到出栈过程
3⃣️StackOverflowError:线程请求的栈深度大于虚拟机所允许的深度抛出该异常
OOM:如果虚拟机可以动态扩展,扩展时无法申请到足够的内存
3、虚拟机栈
与本地方法栈作用类似,虚拟机栈为虚拟机执行Java方法,本地方法栈则为虚拟机执行native方法服务。
4、堆
(1)特点:
1⃣️堆为线程共享的内存区域,虚拟机启动时创建;
2⃣️堆区域的唯一目的是为了存放对象的实例
3⃣️堆是垃圾收集器管理的主要区域,也被称为GC堆
4⃣️堆可细分为:新生代,老年代,再细致一点为eden,From Survivor,To Survivor.
5⃣️Java堆可以处于物理上不连续的内存空间,只要逻辑上连续即可
6⃣️如果堆中没有内存完成实例分配,并且也无法再扩展时,会抛出OOM
5、方法区
(1)特点:
1⃣️线程共享,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码数据,别名“非堆”
(2)运行时常量池
1⃣️方法区的一部分,Class文件中除了有类的版本、字段、方法、接口等描述信息外,还有一项信息时常量池,用于存放编译期生成的各种字面量和符号引用,这部分内容在类加载后进入方法区运行时常量池;
2⃣️运行常量池具备动态性,并非预置入class文件中常量池的内容才能进入运行时常量池,利用String intern()方法运行期间可将新常量放入
3⃣️常量池无法再申请到内存时,会抛出OOM
(3)直接内存
1⃣️不是虚拟机运行时数据区域的一部分,也不是Java虚拟机规范中定义的内存区域,但是频繁被使用,也有可能导致OOM
相关推荐
### JVM 运行时数据区域、垃圾回收机制与类加载机制详解 #### 一、运行时数据区域 Java虚拟机(JVM)的核心组件之一便是其运行时数据区域,这一区域负责存储程序运行过程中产生的各种数据。为了更好地理解这部分内容...
在深入学习Java编程语言的过程中,理解Java虚拟机(JVM)的运行时数据区域是至关重要的。JVM的运行时数据区是程序运行时存储数据的地方,包括程序计数器、Java虚拟机栈、本地方法栈、Java堆以及方法区。以下是这些...
【标题】:“深入理解Java内存模型:从JVM运行时数据区域分析t1、t2、t3的位置” 【描述】:本篇文章旨在探讨Java内存模型中不同类型的变量——包括静态变量t1、实例变量t2和局部变量t3——在HotSpot VM中的存储...
在JVM运行过程中,内存被划分为多个区域,每一块区域都有特定的功能和生命周期。下面我们将详细探讨这些内存区域。 1. 程序计数器(Program Counter Register) 程序计数器是一个较小的内存区域,它跟踪当前线程的...
03 JVM 运行时数据区概述及线程的 PPT 重绘。讲述 Java 虚拟机 运行时数据区所处位置,结构划分,以及各个区域与线程的关系。
JVM的运行时数据区是指JVM在运行时使用的一些区域,用于存储被JVM自身或者在JVM上运行的程序所使用的数据。这些区域包括: 1. 方法区(Method Area):用于存储类信息、字段信息和方法信息的区域。 2. 堆(Heap):...
本文主要探讨虚拟机的历史、运行时数据区域以及内存区域的配置。 首先,虚拟机的历史简述,虽然这里并不需要深入,但我们知道JVM自Java诞生以来经历了多次迭代,不断优化以提升性能和兼容性。它的发展伴随着Java...
1. 运行时数据区域 JVM 的运行时数据区域主要包括: * 堆(Heap):用于存储对象、数组等内存,GC 管理和回收。 * 方法区(Method Area):存储被 JVM 加载的类信息、运行时常量池、JIT 编译后的 Code Cache 等...
本文将详细解析JVM的运行时数据区域、垃圾收集机制以及相关优化参数。 一、运行时数据区域 1. 程序计数器:这是一个较小的内存区域,记录当前线程正在执行的虚拟机字节码指令的地址。如果线程执行的是本地方法(非...
本文档提供了 50 道 JVM 面试题及答案,涵盖了 JVM 的各个方面,包括内存模型、垃圾回收、运行时数据区域、类加载机制、垃圾回收算法等。 JVM 的内存模型 JVM 的内存模型试图定义一种统一的内存模型,能够将各种...
这些数据区域在JVM启动时创建,在JVM退出时销毁。其中一些数据区域是线程独立的,即每个线程都有自己的数据区域;而另一些则是所有线程共享的。了解这些数据区域对于理解Java程序的运行机制以及优化Java应用至关重要...
Java虚拟机(JVM)运行时数据区域主要包括以下几部分:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区以及运行时常量池。 1. **程序计数器**: - 用于记录当前线程所执行的字节码指令地址。 - 当执行的是...
本文将深入探讨Core Java中的JVM架构及其关键组成部分,包括类装载器、执行引擎、运行时数据区域以及本地接口。理解这些概念不仅有助于编写高效、稳定的代码,也是面试中展现技术实力的关键。 首先,JVM(Java ...
它将内存分为若干个不同的数据区域,以便管理Java程序的运行时数据。下面将详细介绍JVM中的运行时数据区,以及Java内存模型(JMM)的知识点。 ### JVM运行时数据区 #### 程序计数器 程序计数器是当前线程所执行的...
Java 虚拟机运行时数据区域图解展示了整个虚拟机运行时数据区域的情况。它包括方法区、堆、栈、PC寄存器等区域,每个区域都有其特定的功能和作用。 Java 面试中需要具备扎实的基础知识和综合的编程能力。只有掌握了...
JVM规范详细定义了JVM的行为,包括数据类型、运行时数据区域、指令集等。 首先,JVM规范中提到的class文件格式是Java字节码文件的标准格式。类文件包含了用于描述各种类型的常量、类和接口的信息,以及类和接口的...