JVM一:JVM内存区域划分

目录

1.为什么需要内存区域划分?

2.内存区域划分介绍

[2.1 Native Method Stacks(本地方法栈)](#2.1 Native Method Stacks(本地方法栈))

[2.2 JVM Stacks(虚拟机栈)](#2.2 JVM Stacks(虚拟机栈))

[2.3 Program Counter Register(程序计数器)](#2.3 Program Counter Register(程序计数器))

[2.4 Heap(堆区)](#2.4 Heap(堆区))

[2.5 Metaspace(元数据区)](#2.5 Metaspace(元数据区))

[2.6 原则](#2.6 原则)


1.为什么需要内存区域划分?

JVM的内存区域划分是指JVM在执行Java程序时,如何将其管理的内存划分为不同的数据区域,以便存储不同类型的数据,并配合代码的执行流程,确保系统的正确运行。

将JVM的内存区域比作一个城市的交通系统。堆(Heap)是城市中的主要停车场,用于停放车辆(对象实例)。方法区(Method Area)像是城市的规划局,存储着城市的蓝图和规划信息。程序计数器(Program Counter)可以看作是路口的交通信号灯,指示着交通的流向和下一步的动作。虚拟机栈(Stack)和本地方法栈(Native Method Stack)分别是城市的公交站和火车站,用于管理和调度交通工具的进出。

2.内存区域划分介绍

JVM是一个应用程序,要从操作系统这里申请内存,JVM根据需求把整个空间,分成几个部分,每个部分各自有不同的功能作用。

2.1 Native Method Stacks(本地方法栈)

  • 1.native表示为JVM内部的C++代码,就是给调用native方法(JVM内部方法)准备的栈空间;
  • 2.native方法之间的调用关系;

2.2 JVM Stacks(虚拟机栈)

  • 1.给Java代码使用的栈;
  • 2.存储的为方法之间的调用关系;
  • 3.整个栈空间内部,可以包含很多个元素(每一个元素表示一个方法),这里的每个元素,称为一个"栈帧",这个栈帧里包含这个方法的入口地址,方法参数,返回地址,局部变量等;

  • 4.值得注意的是:这里的栈不等同于数据结构中的栈,是一个通用的,更广泛的概念,这里的栈特指JVM上的一块内存空间;

  • 5.这里的栈不是只有一个,而是有很多个;每个线程都有一个,一个进程有N个。

2.3 Program Counter Register(程序计数器)

  • 1.记录当前线程执行哪个指令(很小的一块存一个地址),每个线程都有一份

2.4 Heap(堆区)

  • 1.整个JVM空间最大的区域,主要存储new出来的对象,类的成员变量也在堆上;
  • 2.一个进程只有一份,多个线程共用一个堆

2.5 Metaspace(元数据区)

  • 1.类对象,常量池,静态成员在这里

2.6 原则

  • 1.局部变量在栈上;
  • 2.普通成员变量在堆上;
  • 3.静态成员变量在元数据区上

以上就是JVM内存区域划分的简单介绍。

相关推荐
欧恩意4 小时前
【Tools】Java反汇编工具推荐
java·汇编
寻星探路5 小时前
【JVM 终极通关指南】万字长文从底层到实战全维度深度拆解 Java 虚拟机
java·开发语言·jvm·人工智能·python·算法·ai
lbb 小魔仙5 小时前
【Java】Java 实战项目:手把手教你写一个电商订单系统
android·java·python
星河耀银海5 小时前
Java安全开发实战:从代码防护到架构安全
java·安全·架构
青云交5 小时前
Java 大视界 -- 基于 Java 的大数据可视化在城市水资源管理与节水策略制定中的应用
java·java 大数据·java 大数据可视化·城市水资源管理·spark 数据清洗·echarts 热力图·管网漏损控制
鸠摩智首席音效师5 小时前
如何在 Linux 中将文件复制到多个目录 ?
linux·运维·服务器
香蕉你个不拿拿^5 小时前
Linux进程地址空间解析
linux·运维·服务器
人间打气筒(Ada)5 小时前
Linux学习~日志文件参考
linux·运维·服务器·学习·日志·log·问题修复
紫陌涵光5 小时前
112. 路径总和
java·前端·算法
workflower6 小时前
多变量时间序列预测
java·hadoop·nosql·需求分析·big data·结对编程