在JVM规范中,内存空间主要划分为堆区、栈区、方法区、本地方法栈以及PC寄存器,如下图所示
方法区:
方法区存放的是Class的信息,即类的元数据,如类的名称、修饰符、静态变量、常量、Field、Method等,当在程序中使用反射获取类的信息,如clazz.getMethod()时,就是从方法区来获取这些信息的,方法区是全局共享的,所以一个类对应的Class对象只有一个,哪怕这个类创建了n个实例对象。
堆:
堆区存放对象实例及数组值,程序中通过new关键字创建的对象的内存都在此分配。堆是JVM中所有线程共享的。
PC寄存器:
PC寄存器里保存当前正在执行的JVM指令的地址,通过改变里面的值,来获取下一条待执行的指令,线程在执行时会创建PC寄存器
栈区:
线程在运行时会创建JVM栈,这个新创建的栈区为当前线程私有,栈中存放当前线程中的局部基本类型变量(8种基本类型)、方法的参数以及对象引用(对象的地址,对象真正存储在堆区),这些数据以栈帧的形式存储,也就是线程在执行到一个方法时,会创建一个栈帧,将栈帧入栈到之前创建的JVM栈中,这个栈帧就存储当前方法中的入参、局部变量等;如果方法中调用了其他方法,每次方法调用都会创建新的栈帧;当方法执行完毕时,栈帧也随即销毁,栈帧中的变量被回收。
本地方法栈:
用于支持native方法的执行,存储每个native方法的调用状态。
程序的一次运行称为一个执行线索,即线程。线程在执行时,会在PC寄存器开辟一块空间,存储下一条待执行指令的地址,同时在栈区也开辟一块空间,存储该线程在执行期间使用的局部变量等信息;当线程执行到一个方法中时,会创建一个栈帧,并压入该线程的栈中,方法中定义的基本类型数据都存储在该方法对应的栈帧中;如果是对象类型,则会在堆区中开辟一块空间,存储对象的实例信息,同时在栈帧中开辟一块空间,存储对象在堆区的地址;每一次方法的调用都会创建一个栈帧,压入栈中;如果方法中使用到了类的元数据,则会从方法区获取;当方法执行完毕,对应的栈帧被销毁,对应的内存空间被回收;当线程执行完毕,线程对应的栈区销毁,线程中的基本类型局部变量占用的空间都被回收了,但是对象在堆区的空间不一定立即被回收,等待垃圾收集器回收。
相关推荐
#### 一、JVM内存模型概览 JVM(Java虚拟机)内存模型主要由以下几个部分组成:程序计数器、Java虚拟机栈、本地方法栈、Java堆以及方法区(在JDK 8之后称为元空间)。下面将对这几个部分进行详细介绍。 #### 二、...
#### JVM 内存模型概览 JVM 在执行 Java 程序的过程中,将其所管理的内存划分为几个不同的区域,每个区域有其特定的功能和生命周期。理解这些区域如何工作对于深入理解 JVM 至关重要。 ##### 1.1 方法区 (Method ...
JVM内存模型是JVM设计中最核心的部分之一,主要包括以下几部分: ##### 3.1 线程私有区域 - **Java虚拟机栈**:每个线程创建时都会有一个虚拟机栈。每当线程执行一个方法时,都会为这个方法创建一个栈帧,用于存储...
深入理解JVM,意味着掌握其内存模型、垃圾回收机制、类加载机制、性能优化技巧等。此外,熟悉《JVM Specification》和相关的开源项目(如OpenJDK)是进阶学习的宝贵资源。通过实践,如分析JavaCore和dump文件,可以...
- **平台无关的内存模型**:Java设计了一种平台无关的内存模型,使得Java程序可以在不同的硬件架构上运行,无需对程序本身进行修改。 #### 四、JVM的内存模型 JVM的内存模型主要包括以下几个方面: - **Eden区**...
在高级篇和优化篇中,虽然没有提供具体的内容,我们可以推断出,高级篇可能包含了对JVM更深层次的探讨,例如JVM内存模型的高级细节、类加载器的深入讨论、即时编译器(JIT)的工作原理等。而优化篇可能会涵盖JVM性能...
### JVM_GC调优详解 #### 一、JVM体系结构概览 Java虚拟机(JVM)作为Java程序的运行环境,其内部结构复杂且高效。为了更好地理解JVM_GC调优,...同时,掌握JVM内存模型和垃圾回收器的工作原理也是进行有效调优的基础。
JVM内存模型主要包括以下组成部分: ##### 2.1 JVM规范 JVM规范定义了JVM的基本结构及其各个组成部分的功能。它包括Classloader子系统、Execution Engine子系统以及Runtime Data Area和Native Interface组件。 ##...
Java程序的执行过程涉及到了JVM的内存模型和执行引擎,主要包括以下几个方面: 1. **内存模型**: - **程序计数器**:线程私有的,用来记录当前线程所执行的字节码指令的地址。 - **虚拟机栈**:用于存储局部变量...
- 了解JVM内存模型:理解Java的内存区域(如堆、栈、方法区等)和垃圾回收机制,有助于更好地使用MAT。 总之,Eclipse Memory Analyzer是Java开发者诊断内存问题不可或缺的工具,它通过丰富的视图和报告,使复杂的...
内存管理是JVM的重要功能之一,主要涉及对象的创建、存储和销毁。JVM采用分代收集策略,将堆内存分为新生代和老年代。新生代主要用于存放新创建的对象,而老年代则用于存放长期存活的对象。 - **新生代**:通常占堆...
#### 二、JVM内存模型 **2.1 JVM规范** JVM规范定义了JVM的基本架构,包括两个子系统和两个组件: - **Classloader(类装载器)子系统**:负责加载Java类到方法区。 - **Execution Engine(执行引擎)子系统**:...
##### 5.1 JVM内存模型 Java内存模型定义了线程之间的内存可见性规则。它确保了数据的一致性和正确性,是实现高效并发的基础。Java内存模型主要关注三个关键属性:原子性、可见性和有序性。 - **原子性**:指操作...
【深入理解Java虚拟机——JVM知识概览】 在Java编程世界中,Java虚拟机(JVM)扮演着至关重要的角色。它是一个运行Java字节码的虚拟计算机,为Java程序提供了一个跨平台的运行环境。"深入理解Java虚拟机"这本书是...
- **内存模型**:阐述JVM中的内存布局以及堆栈等内存区域的管理策略。 - **执行引擎**:解释JVM如何执行字节码指令。 - **垃圾回收机制**:探讨JVM中不同的垃圾回收算法及其实现原理。 - **线程管理**:介绍JVM如何...
例如,`2196407-20220513094535367-225410216.png`可能展示了JVM内存模型的概览图,`image-20230420112355076.png`可能描绘了类加载的过程等。 总之,理解Java运行时数据区中的方法区对于优化代码性能、排查内存...
#### 一、Java内存模型概览 Java程序的运行依赖于一个精心设计的内存模型,该模型确保了程序在不同环境中的一致性和高效性。Java内存模型主要包括两个部分:栈(Stack)和堆(Heap)。这两部分在功能上有着明显的...
#### 一、Java内存模型概览 Java的内存管理是其核心技术之一,深入了解Java如何管理内存对于开发高质量的应用程序至关重要。Java内存模型主要包括以下几个部分: - **寄存器**:这部分内存由硬件直接支持,通常...