大多数
JVM
将内存区域划分为
Method
Area
(
Non-Heap
)
,
Heap
,
Program
Counter Register
,
Java Method Stack
,
Native
Method Stack
和
Direct
Memomry
(注意
Directory
Memory
并不属于
JVM
管理的内存区域)。前三者一般译为:方法区、堆、程序计数器。但不同的资料和书籍上对于后三者的中文译名不尽相同,这里将它们分别译作:
Java
方法栈、原生方法栈和直接内存区。对于不同的
JVM
,内存区域划分可能会有所差异,比如
Hot Spot
就将
Java
方法栈和原生方法栈合二为一,我们可以同城为方法栈(
Method Stack
)。
首先我们熟悉一下一个一般性的
Java
程序的工作过程。一个
Java
源程序文件,会被编译为字节码文件(以
class
为扩展名),然后告知
JVM
程序的运行入口,再被
JVM
通过字节码解释器加载运行。那么程序开始运行后,都是如何涉及到各内存区域的呢?
概括地说来,
JVM
每遇到一个线程,就为其分配一个程序计数器、
Java
方法栈和原生方法栈。当线程终止时,两者所占用的内存空间也会被释放掉。栈中存储的是栈帧,可以说每个栈帧对应一个
“
运行现场
”
。在每个
“
运行现场
”
中,如果出现了一个局部对象,则它的实例数据被保存在堆中,而类数据被保存在方法区。
我们用上面这一小段文字就描述完了每个内存区域的基本功能。但是这还比较粗糙,下面分别介绍它们的存储对象、生存期与空间管理策略。
2.1
程序计数器
线程特性:私有
存储内容:字节码文件指令地址(
Java Methods
),或
Undefined
(
Native Methods
)
生命周期:随线程而生死
空间策略:占用内存很小
这个最简单,就先捡它说吧。程序计数器,是线程私有(与线程共享相对)的,也就是说有
N
个线程,
JVM
就会分配
N
个程序计数器。如果当前线程在执行一个
Java
方法,则程序计数器记录着该线程所执行的字节码文件中的指令地址。如果线程执行的是一个
Native
方法,则计数器值为
Undefined
。
程序计数器的生存期多长呢?显然程序计数器是伴随线程生而生,伴随线程死而死的。而它所占用的内存空间也很小。
2.2 Java
方法栈与原生方法栈
Java
方法栈也是线程私有的,每个
Java
方法栈都是由一个个栈帧组成的,每个栈帧是一个方法运行期的基础数据结构,它存储着局部变量表、操作数栈、动态链接、方法出口等信息。当线程调用调用了一个
Java
方法时,一个栈帧就被压入(
push
)到相应的
Java
方法栈。当线程从一个
Java
方法返回时,相应的
Java
方法栈就弹出(
pop
)一个栈帧。
其中要详细介绍的是局部变量表,它保存者各种基本数据类型和对象引用(
Object reference
)。基本数据类型包括
boolean
、
byte
、
char
、
short
、
int
、
long
、
float
、
double
。对象引用,本质就是一个地址(也可以说是一个
“
指针
”
),该地址是堆中的一个地址,通过这个地址可以找到相应的
Object
(注意是
“
找到
”
,原因会在下面解释)。而这个地址找到相应
Object
的方式有两种。一种是该地址存储着
Pointer to Object Instance Data
和
Pointer to Object Class Data
,另一种是该地址存储着
Object Instance Data
,其中又包含有
Pointer to Object Class Data
。
分享到:
相关推荐
"JVM内存区域划分" JVM内存区域划分是Java虚拟机(JVM)中的一种内存管理机制,主要分为五个部分:程序计数器、Java栈、本地方法栈、堆和方法区。这些区域各自扮演着不同的角色,共同组成了JVM的内存管理系统。 ...
JVM性能调优_JVM内存区域划分 JVM(Java Virtual Machine)是 Java 语言的核心组件之一,其性能优化对 Java 应用程序的执行效率和稳定性具有至关重要的影响。在 JVM 中,内存区域的划分和管理是性能优化的关键所在...
在Java面试中,对于JVM内存区域的划分是一个经常会涉及到的考点,因此理解这些知识点对于准备Java相关面试的求职者来说是十分必要的。通过这个文档的学习,我们可以加深对JVM内存管理的理解,进一步掌握Java程序运行...
JVM内存区域划分详细解析: JVM(Java Virtual Machine,Java虚拟机)是运行Java字节码的虚拟机进程。在JVM中,内存区域被划分为几个不同的部分,每一个部分有着不同的用途,从而实现了JVM的稳定和高效运行。根据...
### JVM内存空间分配详解 #### 一、JVM内存模型概览 JVM(Java虚拟机)内存模型主要由以下几个部分组成:程序计数器、Java虚拟机栈、本地方法栈、Java堆以及方法区(在JDK 8之后称为元空间)。下面将对这几个部分...
JVM 内存区域组成包括栈内存和堆内存。栈内存用于存放基本类型变量和对象的引用变量,而堆内存用于存放由 new 创建的对象和数组。堆的优势是可以动态分配内存大小,生存期也不必事先告诉编译器,但缺点是要在运行时...
【初探JVM内存区域】 Java虚拟机(JVM)是Java编程语言的核心组成部分,它为Java应用程序提供了运行环境。理解JVM内存区域对于优化Java应用性能至关重要。本篇文章将详细探讨JVM中的主要内存区域及其作用。 1. **...
了解JVM内存区域的划分及其工作原理对于Java开发者来说至关重要,这有助于理解和解决性能问题,如内存泄漏和栈溢出。在实际开发中,合理设置JVM参数(如-Xms, -Xmx等)可以有效防止内存错误,同时,通过阅读如《深入...
《深入理解IDEA插件JProfiler11:高效优化JVM内存》 在Java开发领域,高效运行和优化JVM内存是至关重要的。IntelliJ IDEA(简称Idea)作为广受欢迎的Java集成开发环境,提供了一系列强大的工具来帮助开发者进行性能...
JVM内存分为几个关键区域,每个区域都有特定的功能和作用。这些区域包括: - **程序计数器(PC Register)**:每个线程都有自己独立的程序计数器,用于记录当前线程执行的字节码的行号。在方法调用、异常处理等过程...
JVM 内存状况查看方法和分析工具 JVM 内存状况查看方法和分析工具是 Java 开发人员不可或缺的技能之一。Java 本身提供了多种丰富的方法和工具来帮助开发人员查看和分析 GC 及 JVM 内存的状况,同时开源界和商业界也...
JVM内存模型深度剖析与优化 JVM内存模型是Java虚拟机的核心组件之一,它直接影响着Java应用程序的性能和可靠性。本文将深入剖析JVM内存模型的结构和工作机理,并讨论如何优化JVM参数以提高Java应用程序的性能。 一...
在这份由Sun Microsystems公司出版的《JVM内存管理白皮书》中,我们可以找到关于Java虚拟机(JVM)内存管理的详细介绍和深入分析。这份文档对于想要深入了解JVM工作原理的读者来说是一份宝贵的学习资料。在这份...
JVM 内存结构和 6 大区域 JVM 是 Java虚拟机,它是 Java 语言的核心组件之一,为 Java 程序提供了运行环境。JVM 的内存结构是 Java 程序的基础,它的设计和实现对 Java 程序的性能和可靠性产生了深远的影响。 JVM ...
JVM内存主要分为以下几个区域: 1. **堆内存(Heap)**:这是程序共享的内存区域,用于存储对象实例和数组。 2. **方法区(Method Area)**:用于存储类的信息、静态变量、常量池等数据。 3. **栈内存(Stack)**:每个...
### JVM内存监控工具详解 #### 引言 Java Virtual Machine (JVM) 是运行 Java 应用程序的核心组件,其性能直接影响应用的响应速度和稳定性。JVM 的内存管理是性能优化的关键,尤其是在高并发环境下,合理的内存...
深入理解JVM内存区域与内存溢出异常
### JVM内存配置优化 #### 一、理解JVM内存模型 在进行JVM内存配置优化之前,我们需要了解Java虚拟机(JVM)的内存结构。Java的逻辑内存模型大致分为几个部分: 1. **堆内存(Heap)**:主要用于存储对象实例、数组...
jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识及JIT优化jvm初识...