深入理解JVM(一)-JVM内存模型

本文深入解析JVM内存模型,涵盖Java栈、本地方法栈、程序计数器、堆及方法区的功能与作用,帮助理解Java程序执行过程中的数据存储。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


title: 深入理解JVM(一)-JVM内存模型
date: 2017-10-01 15:41:14
categories: technology
tags:

- 深入理解JVM

JVM内存模型

Java程序执行过程

  • Java源代码文件(.java)会被Java编译器编译为字节码文件(.class)
  • 由JVM中的类加载器加载各个类的字节码文件(.class)
  • JVM执行引擎执行

在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这 段空间一般被称作为Runtime Data Area(运行时数据区),也就是我们常说的JVM内存。

JVM内存分布

Runtime Data Area(运行时数据区)包括 :

Java栈(VM Stack)、本地方法栈(Native Method Stack)、程序计数器(Program Counter Register)、堆(Heap)、方法区(Method Area)

1. Java栈

Java栈中存放的是一个个的栈帧,每个栈帧对应一个被调用的方法,在栈帧中包括局部变量表(Local Variables)、操作数栈(Operand Stack)、指向当前方法所属的类的运行时常量池(运行时常量池的概念在方法区部分会谈到)的引用(Reference to runtime constant pool)、方法返回地址(Return Address)和一些额外的附加信息。

2. 本地方法栈

本地方法栈则是为执行本地方法(Native Method)服务的

3. 程序计数器

用来指示执行哪条指令的,每个线程都需要有自己独立的程序计数器。
由于程序计数器中存储的数据所占空间的大小不会随程序的执行而发生改变,因此,对于程序计数器是不会发生内存溢出现象(OutOfMemory)的。

4. 堆

堆是用来存储对象本身的以及数组
Java 垃圾收集器管理的主要区域
堆是被所有线程共享的,在JVM中只有一个堆

5. 方法区

方法区是被线程共享的区域。
在方法区中,存储了每个类的信息(包括类的名称、方法信息、字段信息)、静态变量、常量以及编译器编译后的代码等。
运行时常量池,它是每一个类或接口的常量池的运行时表示形式,在类和接口被加载到JVM后,对应的运行时常量池就被创建出来
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值