java内部模型,13 张图拆解 Java 中的内存模型

前言

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

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

625e7e9bab62b29b2bf5f141cf92eeb3.png

示意图

目录

5fd09b1eb5d37527392d68f4af357d4e.png

示意图

1. 内存模型 & 分区

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

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

Java虚拟机栈(栈区)

本地方法栈

Java堆(堆区)

方法区

程序计数器

69a6ee632c4f96745092f425320e0635.png

示意图

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

2. Java堆

示意图

4d37b6c1f2d6ccb94955cba6e1ab7277.png

示意图

简介

7c54d3880c17988e2cce2f9acb33a9e5.png

示意图

关于垃圾回收的讲解会在接下来推出的文章里讲解

3. Java虚拟机栈

示意图

65410dc634e3f260a1be5f6d23c5f20d.png

示意图

简介

c35f8e9b056ee8fcf2058e082392e133.png

示意图

4. 本地方法栈

示意图

54256d4000d14027c3677ba5a8c52c78.png

示意图

简介

十分类似Java虚拟机栈,与Java虚拟机区别在于:服务对象,即

Java虚拟机栈为执行 Java 方法服务;本地方法栈为执行 Native方法服务

5. 方法区

示意图

6e432fb6300e17e953eaacd170575a9b.png

示意图

简介

f8216bd2dc49fbe9d2a0b62ccd9cc18d.png

示意图

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

c7c4fa1954dc3b836d1d20155e214f8c.png

示意图

6. 程序计数器

示意图

fa4bc815affeef5a96ca16b662320988.png

示意图

简介

1e0c001c292dddfffaf5131370a5d507.png

示意图

7. 额外知识:直接内存

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

特点:不受堆大小限制

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

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

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

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

8. 总结

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

15ddffb89724bcaec56d6074f768cf1d.png

示意图

作者:Carson_Ho

链接:https://juejin.im/post/6844903677279338509

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值