点击上方“Java基基”,选择“设为星标”

做积极的人,而不是积极废人!

每天 14:00 更新文章,每天掉亿点点头发...

源码精品专栏

 

来源:juejin.im/post/

6844903677279338509


前言

  • 了解Java中的对象、变量等存放的内存区域十分重要

  • 本文将全面讲解Java虚拟机中的内存模型 & 分区,希望你们会喜欢

1. 内存模型 & 分区

Java虚拟机在运行Java程序时,会管理着一块内存区域:运行时数据区

在运行时数据区里,会根据用途进行划分:

  1. Java虚拟机栈(栈区)

  2. 本地方法栈

  3. Java堆(堆区)

  4. 方法区

  5. 程序计数器

2d8ed9c5b2074bad82d5e9bf430ac1ca.png

下面,我将详细介绍每个内存模型分区

基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/ruoyi-vue-pro

  • 视频教程:https://doc.iocoder.cn/video/

2. Java堆

61d367e1dd2bbce3b2169d207b3811e5.png

简介

86865bed11c04ffe12ba1ab975f50953.png

基于 Spring Cloud Alibaba + Gateway + Nacos + RocketMQ + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能

  • 项目地址:https://github.com/YunaiV/yudao-cloud

  • 视频教程:https://doc.iocoder.cn/video/

3. Java虚拟机栈

d96836609b5f5f5dba09ad9d4de6b14b.png

简介

a37b2a2ea6ecfa64251f30cdbf368af4.png

4. 本地方法栈

0d8b7cb41d85380cea16b4124e6455cd.png

简介:十分类似Java虚拟机栈,与Java虚拟机区别在于:服务对象,即Java虚拟机栈为执行 Java 方法服务;本地方法栈为执行 Native方法服务

5. 方法区

d089c6df0a05243734954e6697a826bd.png

简介

7afca681b06604e4d9492cfc29752b1e.png

注:其内部包含一个运行时常量池,具体介绍如下:

ae602802ce4b9a405d30f88db8145e9d.png

6. 程序计数器

25f30d67fe10111fabbdfff9102e8ef8.png

简介

ee30de9b0d530d5a07bd84b11cce588f.png

7. 额外知识:直接内存

  • 定义:NIO类(JDK1.4引入)中基于通道和缓冲区的I/O方式 通过使用Native函数库 直接分配 的堆外内存

  • 特点:不受堆大小限制

不属于虚拟机运行时数据区的一部分 & 不在堆中分配

  • 应用场景:适用于频繁调用的场景

通过一个 存储在Java堆中的DirectByteBuffer对象 作为这块内存的引用 进行操作,从而避免在 Java 堆和 Native堆之间来回复制数据,提高使用性能

  • 抛出的异常:OutOfMemoryError,即与其他内存区域的总和 大于 物理内存限制

8. 总结

本文全面讲解JVM中的内存模型 & 分区,总结如下

5391c45d22e2edcffc7a23bbc9406de1.png

欢迎加入我的知识星球,一起探讨架构,交流源码。加入方式,长按下方二维码噢

7c574aeb3b96f66a3f441d3becf706ae.png

已在知识星球更新源码解析如下:

c95a158197396c724c951d3e15393af1.jpeg

d2f35848d6137a2107b2b851b454a2aa.jpeg

117ef6c121ec927a8f762d8f0560b2b7.jpeg

f0872c0d7770175f1572bb0b7fdbed63.jpeg

最近更新《芋道 SpringBoot 2.X 入门》系列,已经 101 余篇,覆盖了 MyBatis、Redis、MongoDB、ES、分库分表、读写分离、SpringMVC、Webflux、权限、WebSocket、Dubbo、RabbitMQ、RocketMQ、Kafka、性能测试等等内容。

提供近 3W 行代码的 SpringBoot 示例,以及超 6W 行代码的电商微服务项目。

获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。

文章有帮助的话,在看,转发吧。
谢谢支持哟 (*^__^*)
Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐