当前位置: 首页 > news >正文

JVM系列-方法区、堆区、栈区

在 Java 中,内存主要分为方法区、堆区和栈区,每个区域负责不同类型的数据和任务。以下是它们的主要特征:

1. 方法区(Method Area)

  •  方法区是 JVM 的一部分,用于存储类的元数据信息、静态变量、常量池等。
  • 在 Java 8 及之前的版本,永久代(PermGen)被用作方法区的一部分,用于存储类的元数据和静态变量。
  • 在 Java 8 及之后的版本,永久代被元空间(Metaspace)取代。Metaspace 是堆外内存的一部分,用于存储类的元数据信息。

2. 堆区(Heap)

  • 堆区是用于存储对象实例的内存区域。所有通过 `new` 关键字创建的对象都存储在堆区中。
  • 堆区分为年轻代和老年代。年轻代包括 Eden 区和两个 Survivor 区,用于存储新创建的对象。老年代用于存储经过多次垃圾回收后仍然存活的对象。
  • 堆区的大小可以通过 JVM 启动参数进行调整。

3. 栈区(Stack)

  • 栈区是线程私有的,用于存储方法的局部变量、操作数栈、方法出口等。每个线程都有自己的栈。
  • 栈中的局部变量包括基本数据类型和对象引用。当一个方法被调用时,会创建一个栈帧,栈帧中包含了方法的局部变量和执行信息。
  • 栈是一个后进先出(LIFO)的数据结构,方法的调用和返回都是通过栈来实现的。

需要注意的是,方法区、堆区和栈区的划分是一种逻辑上的概念,在具体的 JVM 实现中可能有所不同。不同的 JVM 实现可能采用不同的内存管理机制和结构。例如,一些 JVM 实现可能对方法区的内存管理采用永久代,而另一些可能使用元空间。

(来源:chatgpt的回答)这些要怎么记得住呢,看了很多遍内存的介绍,都记不住。

相关文章:

  • 常见负载均衡方案分析
  • ClickHouse基础知识(六):ClickHouse的副本配置
  • jsp结合servlet
  • 计算机网络(第八版)期末复习(第二章物理层)
  • SpringBoot整合mail进行发送邮箱
  • 【PostgreSQL】约束-排他约束
  • python + flask+nginx+mysql环境安装详解
  • blender插件开发
  • Trino:分区表上的SQL提交 查询流程浅析
  • MySQL数据库学习二
  • WPF+Halcon 培训项目实战(10):HS组件绘制图案
  • 【数据结构和算法】 相等行列对
  • Qt之自定义分页(翻页)控件
  • 【年度总结】与CSDN一起度过的2023
  • [LitCTF 2023]Http pro max plus
  • ➹使用webpack配置多页面应用(MPA)
  • Codepen 每日精选(2018-3-25)
  • css系列之关于字体的事
  • Docker 笔记(2):Dockerfile
  • docker容器内的网络抓包
  • IndexedDB
  • JavaScript服务器推送技术之 WebSocket
  • Java超时控制的实现
  • Js基础——数据类型之Null和Undefined
  • mysql 5.6 原生Online DDL解析
  • Python_网络编程
  • React组件设计模式(一)
  • SpringCloud集成分布式事务LCN (一)
  • 测试开发系类之接口自动化测试
  • 动态规划入门(以爬楼梯为例)
  • 那些被忽略的 JavaScript 数组方法细节
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 如何实现 font-size 的响应式
  • 微信小程序--------语音识别(前端自己也能玩)
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • 用Python写一份独特的元宵节祝福
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 分布式关系型数据库服务 DRDS 支持显示的 Prepare 及逻辑库锁功能等多项能力 ...
  • 关于Kubernetes Dashboard漏洞CVE-2018-18264的修复公告
  • (12)Linux 常见的三种进程状态
  • (52)只出现一次的数字III
  • (BFS)hdoj2377-Bus Pass
  • (C++17) optional的使用
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (六)vue-router+UI组件库
  • (四)Linux Shell编程——输入输出重定向
  • (五)关系数据库标准语言SQL
  • (译) 函数式 JS #1:简介
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转)setTimeout 和 setInterval 的区别
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .md即markdown文件的基本常用编写语法
  • .net core 6 集成和使用 mongodb
  • .NET gRPC 和RESTful简单对比
  • .Net 访问电子邮箱-LumiSoft.Net,好用